java.sql.SQLException: Ungültiger Status, das ResultSet-Objekt geschlossen ist
Ich versuche zu laufen StoredProcedure mit jtds.
Meine Datenbank auf 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();
wenn Sie versuchen zu gehen, über das ResultSet bekam ich die Ausnahme:
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 ------
Ist es im Zusammenhang mit SQL Server 2008?
Ich bin mir nicht sicher ,aber ich hatte nicht diese Fehler, wenn connectig auf SQL Server 2005.
Dank
InformationsquelleAutor Waseem | 2011-02-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nur Durchlaufen der
ResultSet
wenn es nicht schon geschlossen ist, durch den Aufrufclose()
aufResultSet
,Statement
- und/oderConnection
.Wenn Ihre tatsächliche Absicht ist, an den Inhalt der
ResultSet
aus dem Bereich der Methode, wo es erstellt worden ist, dann sollten Sie die Zuordnung dieses zu einemList<SomeObject>
ersten und dann wieder anstelle. Oder wenn Sie Ihre eigentliche Absicht ist, übergeben Sie es an eine andere Klasse/Methode, die erwartet, dass einResultSet
als argument (das ist seine eigene ein schlechtes design, aber das beiseite), dann Sie tun sollten, dass innerhalb der sehr gleichentry
block, wie dieResultSet
ist erstellt worden.Wenn dies geschieht, innerhalb des try-Blocks gibt ' s dann entweder ein Fehler in der JDBC-Treiber oder es gibt etwas ernsthaft falsch im code design wie das
ResultSet
deklariert als class-variable statt als lokale Methode variable (und wird somit gemeinsam von allen threads). Versuchen Sie, zu untersuchen, ob die JDBC code geschrieben wird, als pro den normalen JDBC-idiom.Warum sagst du es ist ein schlechtes design, pass ein ResultSet als argument ?
dies bedeutet, dass Sie benötigen, um die Verbindung zu öffnen, um der Lage sein zu verwenden Ihre Ergebnismenge, die außerhalb der Methode ist und dass es keinen sauberen Weg, um die Verbindung zu schließen nach der Benutzung von resultset. In anderen Worten: resource undicht. Ihre Anwendung würde brechen, nach mehreren Stunden laufen.
Es spielt keine Rolle, solange das resultset ist geschlossen worden, in den finally-block der gleichen try-block, in dem es erstellt wurde. Sie können perfekt umgestalten der resultset->javabean-mapping in eine private Methode so lange, wie Sie es schließen richtig danach.
InformationsquelleAutor BalusC