¿Debería este método abrir y cerrar PreparedStatement con cada llamada a un solo método?
Si está creando el objeto PreparedStatement
dentro del método, entonces debe cerrarlo, una vez que haya terminado con él. Puede reutilizar el objeto PreparedStatement
para varias ejecuciones, pero una vez que haya terminado con él, debe cerrarlo.
Esto se debe a que, aunque se supone que todos los objetos Statement (incluidos los PreparedStatements) se cierran al invocar Connection.close()
, rara vez es el caso. En ciertos controladores JDBC, especialmente el de Oracle, el controlador no podrá cerrar la conexión si la conexión tiene objetos ResultSet y Statement anulados. Esto significa que, en estos controladores:
- Nunca debe perder una referencia a un objeto PreparedStatement. Si lo hace, entonces la conexión no se cerrará, hasta que ocurra la recolección de basura. Si está reutilizando las instancias de PreparedStatement para diferentes declaraciones SQL, es fácil olvidar esto.
- Debería cerrar PreparedStatement una vez que ya no lo necesite. Solo entonces Connection.close() puede derribar la conexión física.