求救java调用有返回值得存储过程,帮忙来看(100分相赠)不够再加
我想在程序执行的时候out 变量是否也要输进去
但是报错:
COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver] CLI0100E 参数数目错误。 SQLSTATE=07001
at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.throw_SQLException(SQLExceptionGenerator.java:254)
at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.throw_SQLException(SQLExceptionGenerator.java:197)
at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.check_return_code(SQLExceptionGenerator.java:436)
at COM.ibm.db2.jdbc.app.DB2PreparedStatement.execute2(DB2PreparedStatement.java:1186)
at COM.ibm.db2.jdbc.app.DB2PreparedStatement.executeUpdate(DB2PreparedStatement.java:778)
at TestPrcedure.main(TestPrcedure.java:36)
存储过程如下:
CREATE PROCEDURE aa (
in id varchar(8),
in dd varchar(16),
out intNo integer,
out intArtl integer)
LANGUAGE SQL
P1: BEGIN
declare intRtnVal integer;
。。。。。。
return intRtnVal;
END P1
代码如下:
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
//import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
public class TestPrcedure {
public static void main(String[] args) {
try{
Class.forName("COM.ibm.db2.jdbc.app.DB2Driver");
Connection db2Conn =
DriverManager.getConnection
("jdbc:db2:sddata","db2admin","admin");
String strSQL = "{? = call DB2ADMIN.COMMPOST (?,?,?,?)}";
db2Conn.setAutoCommit(false);
CallableStatement sqlstmt = db2Conn.prepareCall(strSQL);
sqlstmt.registerOutParameter(4,Types.INTEGER);
sqlstmt.setString(1,"20041114");
sqlstmt.setString(2,"20041214");
sqlstmt.setInt(3,23);
sqlstmt.setInt(4,34);
int i = sqlstmt.executeUpdate();
System.out.println(i);
System.out.println(sqlstmt.getInt(4));
sqlstmt.close();
}catch(ClassNotFoundException cnfe){
cnfe.printStackTrace();
}catch(SQLException sqle){
sqle.printStackTrace();
}catch(RuntimeException ret){
ret.printStackTrace();
}
}
}