Java 带有CallableStatement.getResultSet()的NullPointerException

Java 带有CallableStatement.getResultSet()的NullPointerException,java,sql-server-2005,tsql,jdbc,jtds,Java,Sql Server 2005,Tsql,Jdbc,Jtds,我在SQLServer2005中有一个存储过程,如下所示(简化) 当我从SQLServerManagementStudio运行此过程时,一切正常。但是,当我从Java程序调用同一个进程时,使用如下方法: cs = connection.prepareCall("exec proc ?,"); cs.setParam(...); rs = cs.getResultSet(); // BOOM - Null! while(rs.next()) {...} // NPE! 我无法理解为什么返回的第

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

当我从SQLServerManagementStudio运行此过程时,一切正常。但是,当我从Java程序调用同一个进程时,使用如下方法:

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

while(rs.next()) {...} // NPE!
我无法理解为什么返回的第一个结果集为NULL。有人能给我解释一下吗

作为一种解决方法,如果我选中cs.getMoreResults(),如果为true,请尝试另一个getResultSet()——这次它返回正确的结果集

有什么建议吗?(如果有必要,我正在使用JTDS驱动程序)

谢谢, Raj

的Javadoc表示它返回null“…如果结果是更新计数或没有更多结果”。看起来您的存储过程将有一个更新计数和一个resultset,
getResultSet()
方法(可以说)正在做API契约要求它做的事情


您可以先尝试检索更新计数。否则,请坚持你的“变通方法”。

我想,在选择了正确答案后发布答案是毫无意义的

我建议的解决办法是打电话

set nocount on
在insert语句和

set nocount off

后来。否则,Inserts将返回结果集。

Umm。您是否在某个时候调用了
cs.execute()
cs.executeQuery()
。我清楚地解释了如何从数据库返回结果,以及应该如何解析结果集。对我还注意到,“executeQuery()”似乎一直在工作(从不返回null)。无论如何都接受您的答案…@Raj-如果您使用executeQuery执行,则可能无法检索更新计数。(问题-插入的更新计数是否可以检索?)
set nocount off