从JDBC MSSQL获取返回值

时间:2009-12-22 17:07:14

标签: 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()吗?的executeQuery()?的executeUpdate()?这些似乎都没有默认返回值,但我不确定如何实现它。

编辑1:要清楚,我知道如何调用存储过程。这个问题具体是关于如何获得返回值(而不是结果集)。返回值是一个整数,通常在执行没有结果集的查询时生成,或者在SQL中特别声明类似RETURN 0的内容时生成。

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

2 个答案:

答案 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提供的链接有这种信息。)