小编Jon*_*izz的帖子

在仅设置某些参数时,如何在JDBC中调用存储过程

如果只想设置一些参数,使用JDBC调用存储过程的最佳方法是什么?

如果我只是使用SQL,我可以在SQL中按名称设置参数,以调用sproc.例如,如果我有一个包含9个参数的存储过程,并且我想设置参数1,2和9,其余的保留其默认值,我可以运行此SQL:

exec my_stored_procedure
    @parameter_1       = "ONE",
    @parameter_2       = "TWO",
    @parameter_9       = "NINE"
Run Code Online (Sandbox Code Playgroud)

使用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();
Run Code Online (Sandbox Code Playgroud)

然后我抛出了这个SQLException:

*** SQLException caught ***
SQLState: JZ0SA
Message:  JZ0SA: Prepared Statement: Input parameter not set, index: 2.
Vendor:   0
Run Code Online (Sandbox Code Playgroud)

对于我想要做的一些背景知识,我需要创建一个流程,从IBM MQ流中接收有关产品的信息,然后在第三个应用程序中创建产品.第三方应用程序使用Sybase来存储它的数据,并创建一个产品,我需要调用一个包含大约130个参数的存储过程.对于我需要创建的产品类型,只需要设置其中约15个参数,其余参数将保留为默认值.

我考虑的选项是:

  • 创建仅设置我需要的值的自定义存储过程,然后调用第三方产品sproc.
  • 为Java中的所有参数设置默认值.

当然必须有一个更简单的方法来做到这一点?

java sybase stored-procedures jdbc callable-statement

4
推荐指数
1
解决办法
2万
查看次数