如果只想设置一些参数,使用JDBC调用存储过程的最佳方法是什么?
如果我只是使用sql,我可以在sql中按名称设置参数,以调用sproc.例如.如果我有一个包含9个参数的存储过程,并且我想设置参数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个参数,其余参数将保留为默认值.
我考虑的选项是:
>创建仅设置我需要的值的自定义存储过程,然后调用第三方产品sproc.
>为Java中的所有参数设置默认值.
解决方法:
JDBC不支持此功能.您将不得不创建一个sql字符串并执行:
String sql = "exec my_stored_procedure\n@parameter_1 = ?,\n@parameter_2 = ?,\n@parameter_9 = ?";
PreparedStatement stmt = ...
stmt.setString( 1, "ONE" );
stmt.setString( 2, "TWO" );
stmt.setString( 3, "NINE" );
stmt.execute();
请记住:JDBC不会尝试理解您发送到数据库的sql,除了{}和?之类的特殊字符.我曾经写过一个JDBC“数据库”,它接受JavaScript片段作为“sql”:我只是实现了DataSource,Connection和ResultSet,我可以使用JDBC接口查询我的应用程序的内存模型,但使用JavaScript作为查询语言.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。