La fuga será el problema máximo de cursor abierto.
ORA-01000: maximum open cursors exceeded
Si se excede el número máximo de cursores abiertos, la base de datos quedará inutilizable, a excepción de los cursores que ya están retenidos. Sin embargo, la mayoría de las veces cuando esto sucede, los cursores retenidos ni siquiera se usan (lo que sería el caso en su pregunta).
Desde java 7, la mejor manera de manejar esto es usar un intentar con recursos
. Ambos ResultSet
y PreparedStatement
implementa AutoCloseable
interfaz, lo que significa que se cerrarán cuando ya no se necesiten.
Si no tiene Java 7, debe manejar esto en finally
bloque, pero asegúrese de verificar los valores nulos antes de cerrar, de lo contrario, puede encontrar un NPE si el recurso nunca se inicializó.
Tenga en cuenta que lo contrario no causará ningún problema, ya que cerrar una instrucción cerrará automáticamente su conjunto de resultados.
Tenga en cuenta que puede permitir fácilmente más cursores en su aplicación para tener menos posibilidades de exceder el máximo.
ALTER SYSTEM SET open_cursors = 400 SCOPE=BOTH;
Sin embargo, la mayoría de las veces, si encuentra cursores abiertos al máximo, esto no debería ser una solución, ya que solo ocultaría el problema real.