Java 带有CallableStatement.getResultSet()的NullPointerException
我在SQLServer2005中有一个存储过程,如下所示(简化) 当我从SQLServerManagementStudio运行此过程时,一切正常。但是,当我从Java程序调用同一个进程时,使用如下方法: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! 我无法理解为什么返回的第
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