我正在使用 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/