update statement preparestatement preparedstatement prepared parametros metodo example consultas con java jdbc connection prepared-statement

java - preparestatement - ¿Qué debo cerrar primero, PreparedStatement o Connection?



preparedstatement java insert (2)

La declaración. Yo esperaría que cierres (en orden)

  1. el conjunto de resultados
  2. la declaración
  3. la conexión

(¡y busca nulos en el camino!)

es decir, cerrar en orden inverso a la secuencia de apertura.

Si usa Spring JdbcTemplate (o similar), eso lo JdbcTemplate por usted. Alternativamente, puede utilizar Apache Commons DbUtils y DbUtils.close() o DbUtils.closeQuietly() .

Cuando utilizo un Estado PreparedStatement en JDBC, ¿debería cerrar primero PreparedStatement o Connection ? Acabo de ver un ejemplo de código en el que la Connection se cierra primero, pero me parece más lógico cerrar primero PreparedStatement .

¿Existe una forma estándar y aceptada de hacer esto? ¿Importa? ¿El cierre de Connection también hace que se cierre el PreparedStatement , ya que el PreparedStatement está directamente relacionado con el objeto Connection ?


Los siguientes procedimientos deben hacerse (en orden)

  • El ResultSet
  • The PreparedStatement
  • La Connection .

Además, es aconsejable cerrar todos los objetos relacionados con JDBC en el cierre final para garantizar el cierre.

//Do the following when dealing with JDBC. This is how I''ve implemented my JDBC transactions through DAO.... Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = .... ps = conn.prepareStatement(...); //Populate PreparedStatement rs = ps.executeQuery(); } catch (/*All relevant exceptions such as SQLException*/Exception e) { logger.error("Damn, stupid exception: " , e); } finally { if (rs != null) { try { rs.close(); rs = null; } catch (SQLException e) { logger.error(e.getMessage(), e.fillInStackTrace()); } } if (ps != null) { try { ps.close(); ps = null; } catch (SQLException e) { logger.error(e.getMessage(), e.fillInStackTrace()); } } try { if (conn!= null && !conn.isClosed()){ if (!conn.getAutoCommit()) { conn.commit(); conn.setAutoCommit(true); } conn.close(); conn= null; } } catch (SQLException sqle) { logger.error(sqle.getMessage(), sqle.fillInStackTrace()); } }

Puede ver que he comprobado si mis objetos son nulos y para la conexión, compruebe primero si la conexión no se confirma automáticamente. Muchas personas no lo comprueban y se dan cuenta de que la transacción no se ha comprometido con DB.