2009-12-22 54 views
12

我使用Microsoft SQL Server JDBC Driver 2.0通过Java连接到SQL Server(2005)。从JDBC MSSQL获取返回值

如何从存储过程获取返回值?我正在做类似:

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

检查以下链接[http://www.exampledepot.com/egs/java.sql/CallProcedure.html](http://www.exampledepot.com/egs/java.sql/CallProcedure.html)[ http://www.jguru.com/faq/view.jsp?EID=30731](http://www.jguru.com/faq/view.jsp?EID=30731) – Umesh 2009-12-22 17:17:14

+0

我正在寻找专门获取返回值,我不在寻找关于调用sprocs的一般信息。 – 2009-12-22 17:21:49

回答

33

Bozho的第2版修订的回答很接近,但不能令人信服。但它的确让我回答了答案。

以代码示例我开始与我们结束了:

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

的关键部分在这里是在中prepareCall功能,设置了一个地方,“呼叫”前方“=?”返回值和registerOutputParameter。它必须注册为Integer,因为返回值总是int(至少在SQL Server中,也许在其他DB中不同)。因此您必须使用getInt。我测试了这种方法,它确实有效。

+1

上面,'Types.INTEGER'是'java.sql.Types.INTEGER'。 – 2015-12-09 08:48:45

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

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

an old getting started tutorial

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

(顺便说一句,由Umesh制作中提供的链接过这样的信息。)

+0

它返回一个输出参数,它与返回值不同。我认为存储过程必须定义一个输出参数才能工作。 – 2009-12-22 18:28:45

+0

不,它不在CallableStatement的上下文中(请检查我的更新答案) – Bozho 2009-12-22 18:47:32

+0

准备调用语法不正确(无JDBC转义语法),out参数需要注册才能稍后使用,并且链接已死亡。 .. – 2015-03-02 09:22:27