リークは最大のオープンカーソルの問題になります。
ORA-01000: maximum open cursors exceeded
開いているカーソルの最大数を超えると、すでに保持されているカーソルを除いて、データベースは使用できなくなります。ただし、これが発生するほとんどの場合、保持されているカーソルは使用されません(これはあなたの質問の場合です)。
java 7以降、これを処理する最良の方法は、を使用することです。リソース付き
。両方のResultSet
およびPreparedStatement
AutoCloseable
を実装します インターフェースは、不要になったときに閉じられることを意味します。
Java 7をお持ちでない場合は、これをfinally
で処理する必要があります。 ブロックしますが、閉じる前にnull値を確認してください。そうしないと、リソースが初期化されなかった場合にNPEが発生する可能性があります。
ステートメントを閉じると結果セットが自動的に閉じられるため、逆の場合でも問題は発生しないことに注意してください。
最大値を超える可能性を少なくするために、アプリケーションにより多くのカーソルを簡単に許可できることに注意してください。
ALTER SYSTEM SET open_cursors = 400 SCOPE=BOTH;
ただし、ほとんどの場合、最大のオープンカーソルが発生した場合、実際の問題が隠されるだけなので、これは解決策にはなりません。