java - 从 JDBC MSSQL 获取返回值

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

我正在使用 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 参数与返回值不同。

最佳答案

Bozho 的第二个修改后的答案很接近,但还不够。不过,它确实让我找到了答案。

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

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

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

关于java - 从 JDBC MSSQL 获取返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1947754/

相关文章:

mysql - 获取上一个查询的值

java - java中的ArrayList不删除-1

java - Java.Robot.createScreenCapture 中的透明度

sql-server - 在SSIS中检索失败的软件包和错误消息

c# - 如何修复 "System.Data.SqlClient.SqlException: ' 列名或提供值的数量与 asp.net 中的表定义 .'"不匹配

sql-server - SQL Cascade 树可视化工具

java - 在apache poi中使用for循环

java - Hibernate 将成员变量名称添加到为 secondaryTable 上的 joinColumn 生成的 SQL 中

sql-server - 在 SQL 存储过程中用字符串中的另一个子字符串替换特定子字符串

sql-server - 在 SQL Server 中构建 ISO 日期的最佳方法