从 JDBC MSSQL 获取返回值

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

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

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

我应该使用 execute() 吗?executeQuery()?executeUpdate()?默认情况下,这些似乎都不返回返回值,但我真的不确定如何获得它。

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

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


答案 1

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

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

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

这里的关键部分是“?=“在函数中的”call“前面,该函数为返回值和 .它必须注册为整数,因为返回值始终是整数(至少在SQL Server中,它可能在其他DB中有所不同)。因此,您必须使用.我测试了这种方法,它确实有效。prepareCallregisterOutputParametergetInt


答案 2
c.prepareCall("? = ..");
cs.execute();
String returnedValue = cs.getString(1);

(或适当类型的方法。您可以使用替代)getObject

旧的入门教程

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

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


推荐