INOUT参数¶
既支持输入又接受输出的参数(INOUT 参数)除了调用 registerOutParameter 方法外,还要求调用适当的 setXXX 方法(该方法是从 PreparedStatement 继承来的)。setXXX 方法将参数值设置为输入参数,而 registerOutParameter 方法将它的JDBC 类型注册为输出参数。setXXX 方法提供一个 Java类型的值,而驱动程序先把这个值转换为JDBC类型的值,然后将它送到数据服务器端。然后,要检索输出值,就要用对应的 getXXX 方法。例如,Java 类型为int的参数应该使用方法 setByte 来赋输入值。应该给registerOutParameter 提供类型为 INTEGER 的 JDBC 类型,同时应使用 getInt() 来检索输出值。
下面是一个示例:
try {
// 创建存储过程
String sql = "CREATE OR REPLACE PROCEDURE TEST_PRO1"
+ "(in_param IN INT,out_param OUT INT,inout_param IN OUT INT) "
+ " AS BEGIN "
+ "inout_param=in_param; "
+ "out_param=in_param;"
+ " END TEST_PRO1; ";
stmt = con.createStatement();
stmt.execute(sql);
stmt.close();
// 调用存储过程
cstmt = con.prepareCall("{call TEST_PRO1(?,?,?)}");
cstmt.setInt(1, 2);
cstmt.registerOutParameter(2, java.sql.Types.INTEGER);
cstmt.registerOutParameter(3, java.sql.Types.INTEGER);
cstmt.setInt(3, 20);
cstmt.execute();
int v2 = cstmt.getInt(2);
int v3 = cstmt.getInt(3);
assertEquals(2, v2);
assertEquals(2, v3);
cstmt.close();
} catch (SQLException e) {
fail(e.getMessage());
}