問題は、getStuff()
でデータをフェッチする方法にあります 。 getStuff()
にアクセスするたびに 新しいResultSet
を取得します しかし、あなたはそれを閉じません。
これは、Statement
の期待に違反します クラス(ここを参照- http://docs。 oracle.com/javase/7/docs/api/java/sql/Statement.html
):
デフォルトでは、Statementオブジェクトごとに1つのResultSetオブジェクトのみを同時に開くことができます。したがって、あるResultSetオブジェクトの読み取りが別のオブジェクトの読み取りとインターリーブされている場合、それぞれが異なるStatementオブジェクトによって生成されている必要があります。 Statementインターフェースのすべての実行メソッドは、開いているオブジェクトが存在する場合、ステートメントの現在のResultSetオブジェクトを暗黙的に閉じます。
事態をさらに悪化させるのは、rs
です。 呼び出し元のコードから。また、Statement
から派生しています。 フィールドが閉じられていません。
結論:いくつかのResultSet
があります 同じStatement
に関連する オブジェクトが同時に開かれました。