2011-02-01 14 views
1

jtdsを使用してStoredProcedureを実行しようとしています。java.sql.SQLException:無効な状態、ResultSetオブジェクトが閉じている

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 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(); 

にありますか? 、私はわからないが、SQL Serverには、すでにResultSetclose()を呼び出すことによって閉鎖されていない場合にのみ、ResultSetを反復処理することができ、2005年

おかげ

答えて

5

をconnectigとき、私はこのエラーを持っていませんでしたStatementおよび/またはConnectionである。

ResultSetのコンテンツを作成したメソッドの範囲外に渡すことが実際の目的である場合は、これを最初にList<SomeObject>にマッピングし、代わりにそれを返す必要があります。または、あなたの実際の目的が引数としてResultSetを期待している他のクラス/メソッドに渡すことである場合(それはそれ自体が貧弱なデザインであるが、それを除いて)、それはまったく同じtryブロックResultSetが作成されました。

+0

ありがとう、これはここの状況はありません、私はexecuteQueryを実行した後に直接行きたいです。 – Waseem

+0

これがtryブロック内で発生した場合、JDBCドライバにバグがあるか、ローカルメソッド変数ではなくクラス変数として宣言された 'ResultSet'を持つなど、コード設計に深刻な問題があります。 )。 JDBCコードが通常のJDBCイディオムで記述されているかどうかを調べてみてください。 – BalusC

+0

@ BalusCなぜResultSetを引数として渡すのが貧弱な設計なのですか? –

関連する問題