10bet网址
连接器和api手册
下载本手册
PDF(美国Ltr)- 5.1 mb
PDF (A4)- 5.1 mb
HTML下载(TGZ)- 2.7 mb
HTML下载(Zip)- 2.7 mb


连接器和api手册/.../ 使用JDBC callablestatement执行存储过程

3.6.3使用JDBCcallablestatement执行存储过程

连接器/J完全实现了java.sql.CallableStatement接口。

有关MySQL存储过程的更多信息,请参考使用存储例程

连接器/J通过JDBC公开存储过程功能CallableStatement接口。

的值返回的存储过程inOutParam增加1,和传入的字符串usinginputParam作为一个结果集

例3.3 Connector/J:调用存储过程

CREATE PROCEDURE demoSp(IN inputParam VARCHAR(255), \ INOUT inOutParam INT) BEGIN DECLARE z INT;SET z = inOutParam + 1;SET inOutParam = z;选择inputParam;SELECT CONCAT('zyxw', inputParam);结束


要使用demoSp,请按照以下步骤操作:

  1. 使用来准备可调用语句Connection.prepareCall ()

    注意,您必须使用JDBC转义语法,并且围绕参数占位符的括号不是可选的:

    例3.4 Connector/J: UsingConnection.prepareCall ()

    进口java.sql.CallableStatement;...// //用两个参数准备对存储过程'demoSp'的调用// // //注意使用JDBC-escape语法({call…})// CallableStatement cStmt = conn.prepareCall("{call demoSp(?,)}”);cStmt。setString(1,“英语字母”);

    请注意

    Connection.prepareCall ()是一种昂贵的方法,因为驱动程序执行元数据检索来支持输出参数。出于性能原因,尽量减少不必要的调用Connection.prepareCall ()通过重用CallableStatement实例。

  2. 注册输出参数(如果存在的话)

    检索输出参数的值(参数指定为INOUT当您创建存储过程时),JDBC要求在使用各种registerOutputParameter ()的方法CallableStatement接口:

    例3.5 Connector/J:注册输出参数

    进口java.sql.Types;...// // Connector/J支持命名和索引//输出参数。您可以使用任意一种方法注册输出//参数,也可以使用任意一种//方法检索输出参数,而不管使用什么方法注册它们。// //下面的示例展示了如何使用//注册//输出参数的各种方法(当然,您应该//只使用每个参数的一个注册)。// // //注册第二个参数作为输出,并且//使用类型'INTEGER'作为从// getObject() // cStmt返回的值。Types.INTEGER registerOutParameter (2);// //注册命名参数'inOutParam',并且//使用'INTEGER'类型作为从// getObject() // cStmt返回的值。registerOutParameter(“inOutParam”,Types.INTEGER);...


  3. 设置输入参数(如果存在的话)

    输入和输入/输出参数设置为PreparedStatement对象。然而,CallableStatement还支持按名称设置参数:

    例3.6 Connector/J: SettingCallableStatement输入参数

    ...// //通过index // cStmt设置参数。setString(1,“英语字母”);// //或者,使用//参数名// cStmt设置参数。setString(“inputParam”、“英语字母”);// //使用索引// cStmt设置'in/out'参数。setInt (2, 1);// //或者,通过名称// cStmt设置'in/out'参数。setInt (" inOutParam ", 1);...


  4. 执行CallableStatement,并检索任何结果集或输出参数。

    虽然CallableStatement支持调用任何声明执行方法(executeUpdate ()executeQuery ()execute ()),最灵活的调用方法是execute (),因为你不需要提前知道存储过程是否返回结果集:

    例3.7 Connector/J:检索结果和输出参数值

    ...布尔hadResults = cStmt.execute();// //处理所有返回的结果集// while (hadResults) {ResultSet rs = cStmt.getResultSet();//进程结果集…hadResults = cStmt.getMoreResults();} // //检索输出参数// // Connector/J支持基于索引和//基于名称的检索// int outputValue = cStmt.getInt(2);//基于索引的outputValue = cStmt.getInt("inOutParam");//基于名字的…