Java 参数类型无效,存储过程调用IBM DB2

Java 参数类型无效,存储过程调用IBM DB2,java,stored-procedures,jdbc,db2,Java,Stored Procedures,Jdbc,Db2,我试图用Java代码从IBM DB2数据库调用一个存储过程,下面是callable语句: CallableStatement cstmt = null; ResultSet resultSet = null; BigDecimal bg1; bg1 = new BigDecimal("99999"); cstmt = conn.prepareCall("CALL SPNAME (?,?,?,?)"); cstmt.setString(1, getFIRST()); cstmt.setString

我试图用Java代码从IBM DB2数据库调用一个存储过程,下面是callable语句:

CallableStatement cstmt = null;
ResultSet resultSet = null;
BigDecimal bg1;
bg1 = new BigDecimal("99999");
cstmt = conn.prepareCall("CALL SPNAME (?,?,?,?)");
cstmt.setString(1, getFIRST());
cstmt.setString(2, getSECOND()); 
cstmt.setBigDecimal(3, bg1); 
cstmt.setString(4, getOUTPUTFIRST()); 
cstmt.setQueryTimeout(getTimeout());
resultSet = cstmt.executeQuery();

ResultSetMetaData rsmd = resultSet.getMetaData();
int columnsNumber = rsmd.getColumnCount();

while (resultSet.next()) {
    for (int i = 1; i <= columnsNumber; i++) {
        if (i > 1) 
            System.out.print(",  ");
        String columnValue = resultSet.getString(i);

        ORDERLIST+=resultSet.getString(i) + "| ";
        if ( (i % 9) == 0 ) {
            ORDERLIST+=resultSet.getString(i) + " ~ "; 
        }
    }
}

OUTPUTFIRST=cstmt.getString(4);
CallableStatement cstmt=null;
ResultSet ResultSet=null;
大十进制bg1;
bg1=新的大十进制(“99999”);
cstmt=conn.prepareCall(“调用SPNAME(?,,?,?)”;
cstmt.setString(1,getFIRST());
cstmt.setString(2,getSECOND());
cstmt.setBigDecimal(3,bg1);
cstmt.setString(4,getOUTPUTFIRST());
setQueryTimeout(getTimeout());
resultSet=cstmt.executeQuery();
ResultSetMetaData rsmd=resultSet.getMetaData();
int columnsumber=rsmd.getColumnCount();
while(resultSet.next()){
对于(int i=1;i 1)
系统输出打印(“,”);
String columnValue=resultSet.getString(i);
ORDERLIST+=resultSet.getString(i)+“|”;
如果((i%9)==0){
ORDERLIST+=resultSet.getString(i)+“~”;
}
}
}
OUTPUTFIRST=cstmt.getString(4);
存储过程中的第三个参数是decimal。所有其他的都是字符串

我得到了以下响应:

msg:java.sql.SQLException:参数类型无效


有人能提供建议吗?

当您在第4个参数上设置并调用getString时,可能参数模式是INOUT,在该模式下,您必须设置并注册它。试一试

cstmt.registerOutParameter(4, java.sql.Types.CHAR);
cstmt.setString(4, getOUTPUTFIRST()); 

传递的参数计数是否与实际计数匹配这是我传递的参数计数不正确时出现的错误:执行[invoke]时遇到[java.sql.SQLException]:[[SQL0440]例程SPNAMEin*N未找到指定参数。位于com.ibm.as400.access.jderor.throwSQLException(jderor.java:687)]参数类型无效是另一个错误。存储过程是如何创建的?我不知道,它已经创建了。我只是在引用它。