从 JDBC MSSQL 获取返回值

Posted

技术标签:

【中文标题】从 JDBC MSSQL 获取返回值【英文标题】:Getting the Return Value from 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 参数与返回值不同。

【问题讨论】:

查看以下链接http://www.exampledepot.com/egs/java.sql/CallProcedure.htmlhttp://www.jguru.com/faq/view.jsp?EID=30731 我正在专门寻找返回值,我不是在寻找有关调用 sprocs 的通用信息。 【参考方案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

以上是关于从 JDBC MSSQL 获取返回值的主要内容,如果未能解决你的问题,请参考以下文章

使用 JDBC 从 PL/SQL 存储函数中获取表返回值

使用 SQL Server 2012 中的 MSSQL_Query 的 PHP 调用存储过程返回无效值

PDO 存储过程返回值

是否可以从 jdbc 调用 pl/sql 函数并按名称注册返回值?

JDBC 代码调用返回值的存储函数时出错

JDBC-根据ResultSet返回值生成Insert-Sql语句