我想在程序执行的时候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 aa(?,?,?,?)}";
           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();
       }
}
}

解决方案 »

  1.   

    setString()的时候是既要输入in参数也要输入out参数
      

  2.   

    sqlstmt.registerOutParameter(4,Types.INTEGER);
    我现在通过了我做了一下修改:
    sqlstmt.registerOutParameter(1,Types.INTEGER);
    sqlstmt.setString(2,"20041114");
    sqlstmt.setString(3,"20041214");
    sqlstmt.setInt(4,23);
    sqlstmt.setInt(5,34)
    sqlstmt.execute();
    System.out.println(sqlstmt.getInt(1));输出没有报错,输出为0  请教 sqlstmt.registerOutParameter(1,Types.INTEGER);
    里面的参数是什么意思,第一个是返回值吗? 如果是的话,那输入的参数启不是要往后依次类推吗?
    谢谢再次解答
    分数不够可以再加
      

  3.   

    你改为: String strSQL = "{call aa(?,?,?,?)}";
    db2Conn.setAutoCommit(false);
    CallableStatement sqlstmt = db2Conn.prepareCall(strSQL);
    sqlstmt.setString(1,"20041114");
    sqlstmt.setString(2,"20041214");
    sqlstmt.registerOutParameter(3,java.sql.Types.INTEGER);
    sqlstmt.registerOutParameter(4,java.sql.Types.INTEGER);
    sqlstmt.executeUpdate();int i=sqlstmt.getInt(3);
    int j=sqlstmt.getInt(4);这是偶调用oracle的,你可以看一下pstmt = conn.prepareCall("{call salesControl(?,?,?)}");
    pstmt.setString(1, flag);
    pstmt.registerOutParameter(2,java.sql.Types.INTEGER);
    pstmt.registerOutParameter(3,java.sql.Types.VARCHAR);
    pstmt.execute();

    isOK=pstmt.getInt(2);
    title=pstmt.getString(3);
    1是输入,2,3是输出.
      

  4.   

    to:pliner(pliner) 你没有明白我的意思,也不知道是我没有写清楚吧
    我的存储过程中是有有返回值得  return intRtnVal;
    另外存储过程中 还有两个输出值,但是现在我不用输出值 我只想得到返回值,该如何做
    另外看看下面的帮助我理解一下sqlstmt.registerOutParameter(4,Types.INTEGER);
    我现在通过了我做了一下修改:
    sqlstmt.registerOutParameter(1,Types.INTEGER);
    sqlstmt.setString(2,"20041114");
    sqlstmt.setString(3,"20041214");
    sqlstmt.setInt(4,23);
    sqlstmt.setInt(5,34)
    sqlstmt.execute();
    System.out.println(sqlstmt.getInt(1));输出没有报错,输出为0  请教 sqlstmt.registerOutParameter(1,Types.INTEGER);
    里面的参数是什么意思,第一个是返回值吗? 如果是的话,那输入的参数启不是要往后依次类推吗?
    谢谢再次解答
    分数不够可以再加
      

  5.   

    to:pliner(pliner) 
    其中1是位置,第二个是返回的类型
    不明白举例一下吧
    sqlstmt.registerOutParameter(1,Types.INTEGER);
    这个是否是我的存储过程的返回值呢  return intRtnVal;?
    虚心请教!
      

  6.   

    http://community.csdn.net/Expert/topic/3560/3560232.xml?temp=.3340265
    还有这里
    http://community.csdn.net/Expert/TopicView.asp?id=3531862