【问题标题】:How to call Sybase stored procedure with named params using JDBC如何使用 JDBC 调用带有命名参数的 Sybase 存储过程
【发布时间】:2013-12-21 10:51:22
【问题描述】:

我在 Sybase 中有一个存储过程,我可以像这样从我最喜欢的 SQL 客户端调用它:

exec getFooBar @Foo='FOO', @Bar='BAR'

它返回一个结果表,所以它就像一个查询。它实际上有很多参数,但我只想用 Foo 调用它,有时还指定 Foo 和 Bar。

Sybase 是 ASE 15.0,我使用的是 jConnect 6.0.5。

如果我只指定第一个参数,我可以使用PreparedCall 调用它:

CallableStatement cs = conn.prepareCall("{call getFooBar(?) }");
cs.setString(1,"FOO");

但是我不能使用@Foo 表示法来传递我的参数:

conn.prepareCall("{call getFooBar @Foo='FOO' }");
conn.prepareCall("call getFooBar @Foo='FOO' ");
conn.prepareCall("{call getFooBar @Foo=? }"); // + setString(1,'FOO')

在所有这些情况下,我从数据库中得到异常,告诉我 Foo 参数是预期的:

com.sybase.jdbc3.jdbc.SybSQLException: Procedure getFooBar expects
parameter @Foo, which was not supplied

理想情况下,我希望使用 Spring JdbcTemplateSimpleJdbcCall 来执行此操作,但对于那些我什至无法达到使用普通旧 JDBC 的地步。

总而言之,我想避免这样结束:

{ call getFooBar(?,null,null,null,null,null,?,null,null) }

这可能使用 JDBC 或更好的 Spring 吗?

【问题讨论】:

    标签: sql spring stored-procedures jdbc sap-ase


    【解决方案1】:

    不是最有效的解决方案,但是,您是否尝试过将普通语句本身与 EXEC 一起使用。
    例如。
    String mySql = "EXEC getFooBar @Foo='FOO', @Bar='BAR'"; ResultSet rs = conn.getConnection().createStatement().executeQuery(mySql);

    【讨论】:

      猜你喜欢
      • 2012-08-09
      • 2011-09-18
      • 2013-04-15
      • 2014-06-30
      • 2013-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多