如何在调用存储过程时从前端设置INOUT参数

时间:2011-03-08 09:25:25

标签: java stored-procedures jdbc

我开发了一个SP,比如abc(a,b,c),其中

  • a是IN参数
  • b是OUT参数
  • c是INOUT参数。

如果我直接从数据库中调用此sp作为abc(<val>,?,?),我得到错误

The number of variables in the EXECUTE statement, the number of variables in the OPEN statement, or the number of arguments in an OPEN statement for a parameterized cursor is not equal to the number of values required.

但如果我将其作为abc(<val>,?,<val>)运行,则会成功运行。

我想通过Java程序调用此SP。为此,我正在设置IN&amp; INOUT参数。并注册OUT&amp; INOUT参数。但它给了我与上面相同的错误

2 个答案:

答案 0 :(得分:6)

答案 1 :(得分:2)

您需要使用java.sql.CallableStatement来处理参数。

因此,按照您的示例,您的电话将是:

String sql = "{ call abc(?, ?, ?) }";
CallableStatement cs = conn.prepareCall(sql);
cs.setInt(1, 20); // setting "a" in parameter to 1
cs.registerOutParameter(2, Types.VARCHAR); // setting "b" as out parameter
cs.setString(3, "Some String"); // setting "c" as in parameter
cs.registerOutParameter(3, Types.VARCHAR); // setting "c" as out parameter
// then execute
cs.executeUpdate();
// and retrieve out parameters
String bout = cs.getString(2);
String cout = cs.getString(3);