1

我正在使用 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();

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

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

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

4

2 回答 2

1

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

您可以从https://stackoverflow.com/a/5576442/1519458获取详细信息

于 2013-02-04T09:20:28.683 回答
0

挺有趣的,

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