問題は、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に関連する オブジェクトが同時に開かれました。