0

我的 java 代码中有一个存储过程调用,它使用 sybase 数据库,如下所示:

CallableStatement cstmt=sigmaConnection.prepareCall("{call dbo.sp_insRadEntry(?, ?, ?, ?, ?, ?, ?)}");
cstmt.setString(1,"Nappa");
cstmt.setInt(2,40);
cstmt.setString(3,"Vegeta");
cstmt.setString(4,"Saiyan");
cstmt.setString(7,"Hello"); 

cstmt.execute();

如您所见,我故意不设置第 5 和第 6 个参数,因为如果未传递任何值并且在此调用中调用 dbo.sp_insRadEntry(?, ?, ?, ?, ?, ?, ? ) 我有 7 个参数,因为它不允许我在没有 7 个逗号的情况下设置第 7 个参数。

但是即使我已经设置了第四个参数,我也会遇到以下异常:

'java.sql.SQLException:JZ0SA:Prepared Statement:未设置输入参数,索引:4。'

4

4 回答 4

0

I'm not sure this will work in your DB, but what about omitting the question marks for the parameters you don't want to specify? That is:

CallableStatement cstmt=sigmaConnection.prepareCall(
        "{call dbo.sp_insRadEntry(?, ?, ?, ?, , , ?)}");
cstmt.setString(1,"Nappa");
cstmt.setInt(2,40);
cstmt.setString(3,"Vegeta");
cstmt.setString(4,"Saiyan");
cstmt.setString(5,"Hello"); 

cstmt.execute();
于 2012-10-11T14:22:06.043 回答
0

看起来“索引 4”是指第五个参数(索引从零开始),所以我认为问题在于您的代码无法识别默认参数。

于 2012-10-10T13:17:33.610 回答
0

您也应该尝试使用 setNull 方法设置缺少的第 5 个和第 6 个参数。

于 2012-10-10T13:20:44.997 回答
0

您还需要在索引 5 和 6 处设置值

int type = TYPE
pst.setNull(index, type);

类型参考这里: http ://www.tutorialspoint.com/jdbc/jdbc-data-types.htm

编辑: 如果你有 Not Null 约束,你没有办法,只能在读取数据时忽略的那些位置设置一些虚拟或空白值(ehh ..必须为该检查编写一些额外的代码),如果你真的没有想要这样做,那么为什么首先要设置 Not Null 约束呢?:-)

于 2012-10-10T13:27:00.160 回答