如果您只想设置某些参数,那么使用JDBC调用存储过程的最佳方式是什么?如何在JDBC中调用存储过程仅设置某些参数
如果我只是使用SQL,我可以在SQL中通过名称设置参数以调用存储过程。例如。如果我有九个参数的存储过程,我想设置参数1,2和9,留下其余为默认值,我可以运行该SQL:
exec my_stored_procedure
@parameter_1 = "ONE",
@parameter_2 = "TWO",
@parameter_9 = "NINE"
使用JDBC(具体的jConnect 6.0)看起来在使用CallableStatement时,您必须通过整数索引来设置参数,而不是它们的名称。如果我尝试创建上面的存储过程一个CallableStatement,有9个参数,只设置参数1,2和9,像这样:
myStoredProcedureCall =
sybConn.prepareCall("{call my_stored_procedure (?, ?, ?, ?, ?, ? , ?, ?, ?)}");
myStoredProcedureCall.setString(1, "ONE");
myStoredProcedureCall.setString(2, "TWO");
myStoredProcedureCall.setString(9, "NINE");
ResultSet paramResults = myStoredProcedureCall.executeQuery();
然后我得到此SQLException抛出:
*** SQLException caught ***
SQLState: JZ0SA
Message: JZ0SA: Prepared Statement: Input parameter not set, index: 2.
Vendor: 0
对于我想要做的一些背景知识,我需要创建一个进程,从IBM MQ流接收关于产品的信息,然后在第三个应用程序中创建一个产品。第三方应用程序使用Sybase来存储其数据,并创建一个产品,我需要调用具有大约130个参数的存储过程。对于需要创建的产品类型,只需要设置其中约15个参数,剩下的参数将保留为默认值。
选项我考虑是:
- 创建自定义存储过程,只有将我需要的值,然后调用第三方产品的存储过程。
- 在Java中设置所有参数的默认值。
当然,必须有一个更简单的方法来做到这一点?
只是为别人需要的。上面的例子中,String sql中的'\ n'可以替换为一个空格,Sybase不需要单独列出参数,它们只需用逗号分隔。 – alaniane 2017-12-06 23:05:48
@alaniane正确。我从一些代码中复制了一些代码,我也记录了这些语句。换行符只是为了帮助人类解决SQL和SQL问题。 – 2017-12-08 14:36:40