我使用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()吗?的executeQuery()?的executeUpdate()?这些似乎都没有默认返回值,但我不确定如何实现它。
编辑1:要清楚,我知道如何调用存储过程。这个问题具体是关于如何获得返回值(而不是结果集)。返回值是一个整数,通常在执行没有结果集的查询时生成,或者在SQL中特别声明类似RETURN 0
的内容时生成。
编辑2:executeUpdate()返回一个int,但是这个int与返回值不同。此外,OUT参数与返回值不同。
答案 0 :(得分:35)
Bozho的第二个修订答案很接近,但并不完全存在。它确实引导我找到答案。
以我开始的代码示例结束:
CallableStatement proc = connection.prepareCall("{ ? = call dbo.mySproc() }");
proc.registerOutParameter(1, Types.INTEGER);
proc.execute();
int returnValue = proc.getInt(1);
这里的关键部分是prepareCall
函数中“call”前面的“?=”,它为返回值和registerOutputParameter
设置了一个位置。它必须注册为Integer,因为返回值始终是int(至少在SQL Server中,可能在其他DB中不同)。因此,您必须使用getInt
获取它。我测试了这种方法,它确实有用。
答案 1 :(得分:2)
c.prepareCall("? = ..");
cs.execute();
String returnedValue = cs.getString(1);
(或适当类型的方法。您可以选择使用getObject
)
来自an old getting started tutorial
CallableStatement中的getXXX方法从OUT参数中检索值和/或返回存储过程的值。
(顺便说一下,Umesh提供的链接有这种信息。)