我在 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/