Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So führen Sie 2 Aktualisierungsabfragen in einer Transaktion mit JDBC aus

Wenn Sie mehrere Anweisungen atomar ausführen möchten, müssen Sie eine Transaktion verwenden. Eine JDBC-Verbindung ist standardmäßig im „Auto-Commit“-Modus, was bedeutet, dass jede Anweisung in einer eigenen Transaktion ausgeführt wird. Sie müssen also zuerst den Auto-Commit-Modus deaktivieren, indem Sie Connection.setAutoCommit(false) .

Wenn der Auto-Commit-Modus deaktiviert ist, werden ausgeführte Anweisungen in der aktuellen Transaktion ausgeführt, wenn keine aktuelle Transaktion vorhanden ist, wird eine gestartet. Diese Transaktion kann dann entweder mit Connection.commit() oder mit Connection.rollback() .

Sie müssen etwas tun wie:

try (Connection connection = DriverManager.getConnection(...)) {
    connection.setAutoCommit(false);
    try (Statement stmt = connection.createStatement()) {
        stmt.executeUpdate(<your first update>);
        stmt.executeUpdate(<your second update>);

        connection.commit();
    } catch (SQLException e) {
        connection.rollback();
        throw e;
    }
}

Weitere Einzelheiten finden Sie im Kapitel des JDBC-Tutorials Using Transactions .

Und bitte informieren Sie sich über vorbereitete Erklärungen. Das Verketten von Werten zu einer Abfragezeichenfolge ist schlecht, da es zu einer SQL-Einschleusung oder seltsamen Fehlern führen kann, wenn Sie vergessen, Werte zu maskieren. Siehe auch das Kapitel des JDBC-Tutorials Vorbereitete Anweisungen verwenden .