从 JDBC MSSQL 获取返回值
Posted
技术标签:
【中文标题】从 JDBC MSSQL 获取返回值【英文标题】:Getting the Return Value from JDBC MSSQL 【发布时间】:2010-12-29 04:45:53 【问题描述】:我正在使用 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 参数与返回值不同。
【问题讨论】:
查看以下链接http://www.exampledepot.com/egs/java.sql/CallProcedure.htmlhttp://www.jguru.com/faq/view.jsp?EID=30731 我正在专门寻找返回值,我不是在寻找有关调用 sprocs 的通用信息。 【参考方案1】:c.prepareCall("? = ..");
cs.execute();
String returnedValue = cs.getString(1);
(或相应类型的方法,也可以使用getObject
)
来自an old getting started tutorial
CallableStatement 中的 getXXX 方法从存储过程的 OUT 参数和/或返回值中检索值。
(顺便说一句,Umesh 提供的链接有这种信息。)
【讨论】:
即返回一个输出参数,该参数不同于返回值。我认为存储过程必须定义一个输出参数才能使其正常工作。 不,它不在 CallableStatement 的上下文中(查看我更新的答案) prepare调用语法不正确(没有JDBC转义语法),out参数需要注册后才能使用,链接死...【参考方案2】:Bozho 的第二次修订答案很接近,但并不完全在那里。不过,它确实让我找到了答案。
以我开始的代码示例为例,我们最终得到:
CallableStatement proc = connection.prepareCall(" ? = call dbo.mySproc() ");
proc.registerOutParameter(1, Types.INTEGER);
proc.execute();
int returnValue = proc.getInt(1);
这里的关键部分是prepareCall
函数中“调用”前面的“?=”,它为返回值和registerOutputParameter
设置了一个位置。它必须注册为整数,因为返回值始终是整数(至少在 SQL Server 中,可能在其他数据库中有所不同)。因此,您必须使用getInt
来获取它。我测试了这个方法,它确实有效。
【讨论】:
以上,Types.INTEGER
是java.sql.Types.INTEGER
。以上是关于从 JDBC MSSQL 获取返回值的主要内容,如果未能解决你的问题,请参考以下文章
使用 SQL Server 2012 中的 MSSQL_Query 的 PHP 调用存储过程返回无效值