我正在尝试使用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:参数类型无效。
有人可以提供建议吗?
答案 0 :(得分:0)
当您在第4个参数上设置并调用getString时,可能参数模式为INOUT,您必须同时设置并注册它。尝试
cstmt.registerOutParameter(4, java.sql.Types.CHAR);
cstmt.setString(4, getOUTPUTFIRST());