如果您只想设置一些参数,那么使用 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 流接收有关产品的信息的流程,然后在第三个应用程序中创建一个产品。第 3 方应用程序使用 Sybase 来存储它的数据,并创建一个产品,我需要调用一个具有大约 130 个参数的存储过程。对于我需要创建的产品类型,这些参数只需要设置大约 15 个,其余的将保留为默认值。
我考虑过的选项是:
- 创建一个只设置我需要的值的自定义存储过程,然后调用第 3 方产品存储过程。
- 为 Java 中的所有参数设置默认值。
当然必须有一个更简单的方法来做到这一点?