我的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个逗号。
但即使我已经设置了第4个参数,我也得到以下异常:
'java.sql.SQLException:JZ0SA:Prepared Statement:输入参数未设置,索引:4。'
答案 0 :(得分:0)
看起来'索引4'是指第五个参数(索引从零开始),所以我认为问题是你的代码无法识别默认参数。
答案 1 :(得分:0)
你应该尝试使用setNull方法设置缺少的第5和第6个参数。
答案 2 :(得分:0)
您需要在Index 5&amp ;; 6也
int type = TYPE
pst.setNull(index, type);
对于TYPE,请参阅此处:http://www.tutorialspoint.com/jdbc/jdbc-data-types.htm
编辑:如果您有非空约束,则无法在读取数据时忽略的那些位置设置一些虚拟或空白值(呃......要写一些额外的代码那个检查)如果你真的不想这样做那么为什么你首先设置Not Null约束来考虑它。 : - )
答案 3 :(得分:0)
我不确定这会在您的数据库中有效,但是如果省略您不想指定的参数的问号呢?那就是:
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();