【问题标题】:Getting the Return Value from JDBC MSSQL从 JDBC MSSQL 获取返回值
【发布时间】:2010-12-29 04:45:53
【问题描述】:

我正在使用 Microsoft SQL Server JDBC Driver 2.0 通过 Java 连接到 SQL Server (2005)。

如何从存储过程中获取返回值?我正在做类似的事情:

Connection connection = dataSource.getConnection()
CallableStatement proc = connection.prepareCall("{ call dbo.mySproc() }");
proc.execute();

我应该使用 execute() 吗?执行查询()?执行更新()?默认情况下,这些似乎都没有返回返回值,但我不确定如何获得它。

编辑1:要清楚,我知道如何调用存储过程。这个问题专门关于如何获取返回值(而不是结果集)。返回值是一个整数,通常在您执行没有结果集的查询时或您在 SQL 中明确声明 RETURN 0 之类的内容时生成。

编辑 2:executeUpdate() 返回一个 int,但这个 int 与返回值不同。此外,OUT 参数与返回值不同。

【问题讨论】:

标签: java sql-server stored-procedures jdbc return-value


【解决方案1】:
c.prepareCall("? = ..");
cs.execute();
String returnedValue = cs.getString(1);

(或相应类型的方法,也可以使用getObject

来自an old getting started tutorial

CallableStatement 中的 getXXX 方法从存储过程的 OUT 参数和/或返回值中检索值。

(顺便说一句,Umesh 提供的链接有这种信息。)

【讨论】:

  • 即返回一个输出参数,该参数不同于返回值。我认为存储过程必须定义一个输出参数才能使其正常工作。
  • 不,它不在 CallableStatement 的上下文中(查看我更新的答案)
  • prepare调用语法不正确(没有JDBC转义语法),out参数需要注册后才能使用,链接死...
【解决方案2】:

Bozho 的第二次修订答案很接近,但并不完全在那里。不过,它确实让我找到了答案。

以我开始的代码示例为例,我们最终得到:

CallableStatement proc = connection.prepareCall("{ ? = call dbo.mySproc() }");
proc.registerOutParameter(1, Types.INTEGER);
proc.execute();
int returnValue = proc.getInt(1);

这里的关键部分是prepareCall 函数中“调用”前面的“?=”,它为返回值和registerOutputParameter 设置了一个位置。它必须注册为整数,因为返回值始终是整数(至少在 SQL Server 中,可能在其他数据库中有所不同)。因此,您必须使用getInt 来获取它。我测试了这个方法,它确实有效。

【讨论】:

  • 以上,Types.INTEGERjava.sql.Types.INTEGER
猜你喜欢
  • 2012-08-16
  • 2023-04-10
  • 1970-01-01
  • 2013-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多