update statement preparedstatement prepared example java database database-connection prepared-statement

java - statement - ¿Cerrar la conexión cierra automáticamente la declaración y el conjunto de resultados?



preparedstatement java insert (2)

Sé que el patrón seguro en Java es cerrar su ResultSet, Declaración y Conexión en orden en un bloque final.

Si cierra la conexión y luego intenta cerrar la declaración (no lanza la excepción). Pero si intenta llamar a cualquier método desde una declaración, se lanza una excepción.

Me preguntaba si el cierre de la conexión cierra automáticamente todos los objetos de instrucción creados a partir de esa conexión.

Actualizar:
Estoy usando DatabaseProductVersion: Oracle Database 11g Release 11.1.0.0.0
DriverName: controlador JDBC de Oracle
DriverVersion: 10.2.0.4.0


Los detalles se reducen en última instancia a cada implementación del controlador JDBC; sin embargo, una vez que se cierra una conexión a la base de datos, todo lo relacionado con ella se desecha en el lado de la base de datos, por lo que el cliente no puede hacer nada más que cerrar automáticamente los objetos que representan estos recursos.

Nunca se sabe de qué manera podrían romperse las bases de datos / controladores (por ejemplo, puede haber pérdidas de recursos), por lo tanto, la recomendación de la mejor práctica es cerrar todo explícitamente.


Sí, la API de Connection.close dice "Libera la base de datos de este objeto de Connection y los recursos JDBC inmediatamente en lugar de esperar a que se publiquen automáticamente". El problema es que las aplicaciones generalmente usan grupos de conexión de base de datos y estos simplemente pueden devolver la Conexión al grupo en Connection.close.

En cualquier caso, es una buena práctica cerrar siempre el conjunto de resultados y la declaración explícitamente y no confiar en Connection.close.

Además, no es la mejor idea trabajar directamente con JDBC. En su lugar, puede usar Spring JDBC y olvidarse de liberar el problema de recursos.