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

时间:2015-12-08 12:18:07

标签: java stored-procedures jdbc db2

我正在尝试使用Java代码从IBM DB2数据库调用存储过程,这是可调用语句:

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);

存储过程中的第三个参数是十进制。所有其他都是字符串。

我正在输出以下回复:

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

有人可以提供建议吗?

1 个答案:

答案 0 :(得分:0)

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

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