读取输出参数后无法获得结果集

时间:2013-02-04 01:42:08

标签: java sql-server stored-procedures resultset callable-statement

我使用java访问mssql 2012 DB

我有一个存储过程“procX”,在参数中只取1,(比如命名为@ p1)并返回单个结果集。它工作正常,除非我在获得结果集之前尝试读取返回值。代码如下。如果我删除“//”并获得返回值,则会得到null作为结果。

cs = con.prepareCall("{? = call procX(?)}");
cs.registerOutParameter(1, Types.INTEGER);
cs.setInt("p1", 1);
cs.execute();         
//cs.getInt(1);
rs = cs.getResultSet();

即使我在获得结果集后读取了返回值,也会关闭结果集。

有没有办法读取返回值而不会无法获得结果集?

据我所知,这种情况不仅限于返回值,也适用于任何其他输出参数。

2 个答案:

答案 0 :(得分:1)

看起来你必须在读取任何输出参数之前获得结果集。

您可以从https://stackoverflow.com/a/5576442/1519458

获取详细信息

答案 1 :(得分:0)

很有意思,

  • 首先:我不知道你在使用什么样的驱动程序但是尝试 改变和提供我们的信息将是相同的行为或没有。
  • 其次:如果您正在使用Microsoft JDBC Driver for SQL Server试试 调整记录器,看看哪里有问题,这个库使用 java.util.logging.Logger用于在执行每个之前/之后进行记录 操作。
  • 我认为您正在使用java 7,尝试降级并在Java 6上运行它,为什么?因为在getValue方法的SQL Server的Microsoft JDBC驱动程序中有一些有趣的逻辑(带有Closeable接口),它从getInt方法调用。