java.sql.SQLException: недопустимое состояние, объект ResultSet закрыт - PullRequest
1 голос
/ 01 февраля 2011

Я пытаюсь запустить StoredProcedure, используя jtds. Моя база данных находится на 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();

при попытке просмотреть набор результатов я получил исключение:

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.

Спасибо

1 Ответ

5 голосов
/ 01 февраля 2011

Вы можете перебрать ResultSet, только если он еще не был закрыт, вызвав close() на ResultSet, Statement и / или Connection.

Если ваше реальное намерение состоит в том, чтобы передать содержимое ResultSet из области действия метода, в котором оно было создано, то вам следует сначала сопоставить его с List<SomeObject>, а затем вернуть его. Или, если ваше реальное намерение состоит в том, чтобы передать его другому классу / методу, который ожидает ResultSet в качестве аргумента (что само по себе является плохим дизайном, но в стороне), то вы должны делать это внутри того же try блок как ResultSet создан.

...