在 mysql命令行中:

创建不带参数的存储过程,如:

create procedure sp_name () select * from usertable;         表示创建一个名为sp_name的存储过程,执行的语句为 select * from usertable;

执行存储过程:

call sp_name();

2.通过CallableStatement接口在JAVA程序中执行存储过程:

1.Connection conn = 连接数据库 ;(conn 为连接数据库后返回的引用)

2.[例子] CallableStatement cstmt = conn.prepareCall("{call show_usertbl()}");   //创建CallableStatement对象.调用prepareCall方法调用存储过程

//例子中,存储过程的名字为 show_usertbl(),call表示调用.注意,旁边要有中括号{}引起来

(一)调用没有参数的存储过程

public class Test3 {
	public static void main(String[] args) {
		test();
	static void test() {
		Connection conn = DBUtil.open(); // 连接数据库	(注:DBUtil是自定义的类,详细定义如何可翻看之前文章)
		try {
			CallableStatement cstmt = conn.prepareCall("{call show_usertbl()}");// 第一步
			ResultSet rs = cstmt.executeQuery(); // 第二步,执行存储过程调用,结果返回到 rs中。
			while (rs.next()) {
				int id = rs.getInt(1);
				String name = rs.getString(2);
				System.out.println("id:" + id + " name:" + name);
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBUtil.close(conn); // 关闭数据库
(二)带输入参数的存储过程: 

参数类型: in 表示输入,out 表示输出

在mysql命令行下:

创建带输入参数的存储过程:

例子:create procedure insert_usertbl(in myid int,  in myname  varchar(20))  insert into usertbl(id,name) values(20,"xiaoming");

说明:insert_usertbl 是存储过程的名字,myid是整型的输入参数,myname是字符型的输入参数, insert into usertbl(id,name) values(20,"xiaoming") 是SQL语句

创建存储过程后,在JAVA程序中通过CallableStatement接口调用:
问号?表示要动态赋值的变量。

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
public class Test4 {
	public static void main(String[] args) {
		Insert();
	static void Insert()
		Connection conn = DBUtil.open();	//连接数据库
		try {
			CallableStatement cstmt = conn.prepareCall("{call insert_usertbl(?,?)}");
														//问号表示要动态赋值的参数
			cstmt.setInt(1, 8);				//给第一个问号赋值为8
			cstmt.setString(2, "xiaowang"); //给第二个问号赋值为“xiaowang”
			cstmt.executeUpdate();			//执行 call insert_usertbl(8,“xiaowang”)
		} catch (SQLException e) {
			e.printStackTrace();
		}finally
			DBUtil.close(conn);				//关闭数据库
(三)创建有输入输出参数的存储过程: 

参数类型: in 表示输入,out 表示输出
在mysql命令行下:

例子:create procedure getNameById(in cid int,out return_name varchar(20)) select name from usertbl where id = cid;

说明:其中getNameById为存储过程名字,cid为要输入的参数,而return_name为系统要返回给我的数据。select name into return_name from usertbl where id = cid 是操作的SQL语句 (返回的name是从return_name中抽取的)

Java程序中用CallableStatement接口调用此存储过程:

注意:有输出变量的时候,要给输出变量进行注册

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Types;
public class Test5 {
	public static void main(String[] args) {
		getName();
	static void getName() {
		Connection conn = DBUtil.open();
		try {
			CallableStatement cstmt = conn.prepareCall("{call getNameById(?,?)}");// 输入输出变量都要以?表示
			cstmt.setInt(1, 20); // 给第一个问号赋值为20
			// 注册输出参数
			cstmt.registerOutParameter(2, Types.CHAR); // 给作为输出变量的第二个问号注册,并制定其为char型
			cstmt.execute(); // 执行 call getNameById()
			String name = cstmt.getString(2); // 取存储过程中的第二个变量的值
			System.out.println("name:" + name);
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBUtil.close(conn);
                    1.什么是存储过程:在数据库中,可以通过创建一个存储过程来达到一次性执行多条SQL语句的目的在 mysql命令行中:创建不带参数的存储过程,如:create procedure sp_name () select * from usertable;         表示创建一个名为sp_name的存储过程,执行的语句为 select * from usertable; 
				
Java调用存储过程java代码调用存储过程,需要获取到connection对象,然后执行prepareCall()方法,样例如下:package com.leo.test;import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Resu
int getInt(int parameterIndex) throws SQLException float getFloat(int parameterIndex) throws SQLException 关于postgresql的多结果集,或者游标返回存储过程请查看上篇文章: 【转载】postgresql存储过程中返回类型 本篇文章主要是为了将游标cursor的返回结果实用化而作出各种猜测及调整。目的在于找到java+pg数据库存储过程的最佳开发模式及调用方式。 必要数据及代码交代 地区区域表一张,数据量大约30000条,不过不是重点,表结构如下: "id" int4 DEFAUL...
前言:在按部就班的学习JDBC的过程中,来到了这里来——CallableStetement。怀着不情愿的心情花了一下午学习了相关知识,不情愿是因为感觉像鸡肋,学了没什么用。也许是我能力有限,目光短浅吧。总之,既学之 ,则记之。以防忘记,又要遭受那不情愿之苦而重新学一次 注:本文基于mysql数据库 一、存储过程     存储过程是为了完成特定功能的SQL语句...
1. jdbc 调用存储过程 jdbc 调用存储过程与函数, 均是通过CallableStatement 类执行sql的. 通常而已, 存储过程是不允许有返回值的, 而函数是允许有返回值的. 1.1 CallableStatement sql jdbc调用存储过程与函数的sql写法有区别, 需要额外注意: 存储过程: { call $produceName([?,…]) } 函数: { ?= c...