sql >> Base de Datos >  >> RDS >> Oracle

Cerrar ResultSet pero no cerrar PreparedStatement

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.