java.sql.SQLException:无效状态,ResultSet对象已关闭 [英] java.sql.SQLException: Invalid state, the ResultSet object is closed

查看:767
本文介绍了java.sql.SQLException:无效状态,ResultSet对象已关闭的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用jtds运行StoredProcedure. 我的数据库在SQL SErver 2008上

I am trying to run StoredProcedure using jtds. My database is on SQL SErver 2008

private String DRIVER_NAME_VALUE = "net.sourceforge.jtds.jdbc.Driver";  
private String URL_VALUE = "jdbc:jtds:sqlserver://"; 
...
cstmt =dbConnection.getCallableStatement("{? = call dbo.GetAgentStats (?)}");
.
.
.
rs = cstmt.executeQuery();

当尝试遍历结果集时,出现异常:

when trying to go over the Result set I got the Exception:

java.sql.SQLException: Invalid state, the ResultSet object is closed.
        at net.sourceforge.jtds.jdbc.JtdsResultSet.checkOpen(JtdsResultSet.java:299)
        at net.sourceforge.jtds.jdbc.JtdsResultSet.first(JtdsResultSet.java:527)
        at com.verint.impact360.WFM_plugins.CCE.CCEASCMAdapter.runReport(CCEASCMAdapter.java:238)
        at com.verint.impact360.WFM_plugins.CCE.CCEASCMAdapter.retrieveData(CCEASCMAdapter.java:131)
        at com.bluepumpkin.Plugins.PTeXtender.GenericDCSPlugin.retrieveStatisticsData(GenericDCSPlugin.java:332)
        at com.bluepumpkin.Plugins.PTeXtender.GenericDCSPlugin.start(GenericDCSPlugin.java:68)
        at com.verint.impact360.WFM_plugins.CCE.CCEASCMAdapter.main(CCEASCMAdapter.java:75)
Logger.logStackTrace():----- End Stack Trace   ------

它与SQL Server 2008有关吗? 我不确定,但是在连接到SQL Server 2005时没有出现此错误.

Is it related to SQL Server 2008? I am not sure ,but I didn't have this error when connectig to SQL Server 2005.

谢谢

推荐答案

仅当尚未关闭ResultSet时,可以通过在ResultSetStatement和/或<上调用close()来遍历ResultSet c4>.

You can only iterate over the ResultSet when it has not already been closed by calling close() on ResultSet, Statement and/or Connection.

如果您的实际意图是将ResultSet的内容传递到创建它的方法的范围之外,则应首先将其映射到List<SomeObject>,然后将其返回.或者,如果您的实际意图是将其传递给其他需要ResultSet作为参数的类/方法(由于其本身的设计较差,但请注意),那么您应该在相同的块,因为创建了ResultSet.

If your actual intent is to pass the content of the ResultSet out of the scope of the method where it is been created, then you should be mapping this to a List<SomeObject> first and then return it instead. Or if your actual intent is to pass it to some other class/method which expects a ResultSet as argument (which is by its own a poor design, but that aside), then you should be doing that inside the very same try block as the ResultSet is been created.

这篇关于java.sql.SQLException:无效状态,ResultSet对象已关闭的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆