在近年JDBC中,存储过程越来越边缘化,用的也好。即使在数据库中,存储过程也是很偏门的,仅作为了解。
下面是关于CallbaleStatement的源代码,为了展示方便,所有异常抛出而不处理
public class ProcDemo{
// 定义MySQL的数据库驱动程序
public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
// 定义MySQL数据库的连接地址
public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ;
// MySQL数据库的连接用户名
public static final String DBUSER = "root" ;
// MySQL数据库的连接密码
public static final String DBPASS = "mysqladmin" ;
public static void main(String args[]) throws Exception{ // 所有异常抛出
Connection conn = null ; // 数据库连接
CallableStatement cstmt = null ; // 数据库操作
String sql = "{CALL myproc(?,?,?)}" ; // 调用过程
Class.forName(DBDRIVER) ; // 加载驱动程序
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
cstmt = conn.prepareCall(sql) ;
cstmt.setInt(1,70) ; // 设置第一个参数是70
cstmt.setInt(2,80) ; // 设置第二个参数是80
cstmt.registerOutParameter(2,Types.INTEGER) ;
cstmt.registerOutParameter(3,Types.INTEGER) ;
cstmt.execute() ; // 执行过程
System.out.println("INOUT的返回值:" + cstmt.getInt(2)) ;
System.out.println("OUT的返回值:" + cstmt.getInt(3)) ;
cstmt.close() ;
conn.close() ; // 数据库关闭
}
}
数据库的mysql存储过程的建立代码一并奉上。
CREATE PROCEDURE mypro(in p1 INT,INOUT p2 INT,OUT p3 INT)
BEGIN
SELECT p1,p2,p3; -- 输出p1,p2,p3的内容
SET p1 = 10;
SET p2 = 20;
SET p3 = 30;
END