parameter - preparedstatement java
¿Java Connection.close rollback? (6)
¿Java Connection.close rollback en un bloque finalmente ?.
Sé que .Net SqlConnection.close lo hace.
Con esto podría hacer try / finally blocks sin catch ...
Ejemplo:
try {
conn.setAutoCommit(false);
ResultSet rs = executeQuery(conn, ...);
....
executeNonQuery(conn, ...);
....
conn.commit();
} finally {
conn.close();
}
De acuerdo con javadoc , debe intentar confirmar o revertir antes de llamar al método de cierre. Los resultados de lo contrario están definidos por la implementación.
El controlador JDBC de Oracle se compromete en close () de forma predeterminada. No debe confiar en este comportamiento si tiene la intención de escribir código JDBC multiplataforma.
En cualquier sistema de base de datos con el que he trabajado, no hay daño al hacer un rollback justo después del commit, así que si comprometes en el try bloque y lo relanza al final, las cosas se comprometen, mientras que si una excepción o causas de retorno temprano el compromiso que se debe perder, la reversión revertirá la transacción. Entonces, lo más seguro es
try {
conn.setAutoCommit(false);
ResultSet rs = executeQuery(conn, ...);
....
executeNonQuery(conn, ...);
....
conn.commit();
} finally {
conn.rollback();
conn.close();
}
Es inútil retroceder en bloque finalmente. Después de comprometerse, y la confirmación es exitosa, ¿por qué retroceder? Entonces, si fuera tú, retrocedería en el bloque catch.
El comportamiento es completamente diferente entre diferentes bases de datos. Ejemplos:
Oráculo
La transacción se confirma al cerrar la conexión con una transacción abierta (como lo indicaron @Mr. Shiny y New 安 宇.
servidor SQL
Llamar al método de cierre en el medio de una transacción hace que la transacción se retrotraiga.
Para MySQL JDBC, la implementación retrotrae la conexión si se cierra sin una llamada a métodos commit o rollback.