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 .