java - 带有 CallableStatement.getResultSet() 的 NullPointerException

标签 java sql-server-2005 t-sql jdbc jtds

我在 SQL Server 2005 中有一个存储过程,如下所示(简化)

CREATE PROCEDURE FOO
 @PARAMS
AS
BEGIN
  -- STEP 1: POPULATE tmp_table
  DECLARE @tmp_table TABLE (...)
  INSERT INTO @tmp_table
      SELECT * FROM BAR

  -- STEP 2: USE @tmp_table FOR FINAL SELECT
  SELECT abc, pqr
    FROM BAZ JOIN @tmp_table 
    ON some_criteria
END

当我从 SQL Server Management Studio 运行此过程时,一切正常。但是,当我从 Java 程序调用相同的过程时,使用如下内容:

cs = connection.prepareCall("exec proc ?,");
cs.setParam(...);
rs = cs.getResultSet(); // BOOM - Null!

while(rs.next()) {...} // NPE!

我不明白为什么返回的第一个结果集是NULL。有人可以向我解释一下吗?

作为解决方法,如果我检查 cs.getMoreResults() 并且如果为 true,请尝试另一个 getResultSet() - 这次它会返回正确的结果集。

请问有什么指点吗? (如果重要的话,我正在使用 JTDS 驱动程序)

谢谢, 拉杰

最佳答案

getResultSet() 的 Javadoc说它返回 null“...如果结果是更新计数或没有更多结果”。看起来您的存储过程将有一个更新计数一个结果集,并且 getResultSet() 方法(可以说)只是执行 API 合约规定的操作.

您可以先尝试检索更新计数。否则,请坚持使用您的“解决方法”。

关于java - 带有 CallableStatement.getResultSet() 的 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3050599/

相关文章:

java - 将 GWT 与 IntelliJ 12 集成的问题

java - 公共(public)类型 Dog 必须在其自己的文件中定义

java - 我如何在其他 View 之后绘制某些 View ?

sql-server-2005 - Active - SQL Server 2005 的主动灾难恢复策略

c# - ASP.NET 配置文件保存被旧值覆盖

sql - 使用指南克隆树结构

java - 线程 "main"java.io.FileNotFoundException I/O Java 中的奇怪异常

database - 使用 Winforms 应用程序部署 SQL Server 数据库

sql - 子表结果串联

sql-server - SQL - 嵌套选择和透视