Frage

Hat Java Connection.Close Rollback in einen endgültigen Block?

Ich weiß, dass .NET SQLConnection.close es tut.

Damit konnte ich versuchen/schließlich blockieren ohne Fang ...

Beispiel:

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

    conn.commit();
} finally {
   conn.close();
}
War es hilfreich?

Lösung

Entsprechend Der Javadoc, Sie sollten versuchen, entweder zu verpflichten oder zurückzurufen, bevor Sie die schließende Methode aufrufen. Die Ergebnisse ansonsten sind implementierungsdefiniert.

Andere Tipps

In jedem Datenbanksystem, mit dem ich zusammengearbeitet habe, schadet es nicht, direkt nach dem Commit einen Rollback durchzuführen. Wenn Sie sich also im Try -Block verpflichten und die schließlich die Dinge verpflichten, werden die Dinge begangen, während eine Ausnahme oder eine frühzeitige Rückkehr verursacht Das Verständnis für den Übersehen, der Rollback wird die Transaktion rollen. Das Sichere ist also zu tun

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

    conn.commit();
} finally {
   conn.rollback();
   conn.close();
}

Der JDBC -Treiber von Oracle verpflichtet sich standardmäßig bei Close (). Sie sollten sich nicht auf dieses Verhalten verlassen, wenn Sie beabsichtigen, einen Multi-Plattform-JDBC-Code zu schreiben.

Das Verhalten unterscheidet sich zwischen verschiedenen Datenbanken völlig. Beispiele:

Orakel

Die Transaktion wird beim Schließen der Verbindung mit einer offenen Transaktion festgelegt (wie @MR. Shiny und New 安宇 angegeben.

SQL Server

Wenn Sie die enge Methode in der Mitte einer Transaktion aufrufen, wird die Transaktion zurückgeführt.

Schließungsmethode (SQLServerConnection)

Es ist nutzlos, endlich Block zu rollen. Warum ist es erfolgreich, wenn Sie sich verpflichtet haben und sich verpflichten, sich zurückzusetzen? Wenn ich du wäre, würde ich im Fangblock rollen.

Für MySQL JDBC rollt die Implementierung die Verbindung zurück, wenn sie ohne Aufruf zum Verpflegung oder zur Rollback -Methoden geschlossen werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top