Pregunta

¿Java Connection.close revierte en un bloque finalmente?

Sé que .Net SqlConnection.close lo hace.

Con esto podría hacer try / finalmente bloques sin captura ...

Ejemplo:

try {
    conn.setAutoCommit(false);
    ResultSet rs = executeQuery(conn, ...);
    ....
    executeNonQuery(conn, ...);
    ....

    conn.commit();
} finally {
   conn.close();
}
¿Fue útil?

Solución

De acuerdo con the javadoc , debe intentar confirmar o revertir antes de llamar al método de cierre. De lo contrario, los resultados están definidos por la implementación.

Otros consejos

En cualquier sistema de base de datos con el que he trabajado, no hay ningún daño en hacer una reversión justo después de la confirmación, por lo que si se compromete en el bloque try y se revierte finalmente, las cosas se comprometen, mientras que si es una excepción o la devolución anticipada hace que se pierda la confirmación, 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();
}

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.

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 @Mr. Shiny and New & # 23433; & # 23431; indicada.

SQL Server

  

Llamar al método de cierre en medio de una transacción hace que el   transacción a revertir.

método de cierre (SQLServerConnection)

Es inútil retroceder en el bloque finalmente. Después de comprometerse, y el compromiso es exitoso, ¿por qué retroceder? Entonces, si fuera usted, retrocedería en el bloque de captura.

Para MySQL JDBC, la implementación revierte la conexión si se cierra sin una llamada a los métodos commit o rollback.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top