Hvis du ønsker at udføre flere udsagn atomisk, skal du bruge en transaktion. En JDBC-forbindelse er standard til 'auto-commit'-tilstand, hvilket betyder, at hver sætning udføres i sin egen transaktion. Så du skal først deaktivere auto-commit-tilstand ved at bruge Connection.setAutoCommit(false)
.
Med auto-commit-tilstand deaktiveret, vil udførte sætninger blive udført i den aktuelle transaktion, hvis der ikke er nogen aktuel transaktion, vil en blive startet. Denne transaktion kan derefter enten udføres ved hjælp af Connection.commit()
eller rullet tilbage ved hjælp af Connection.rollback()
.
Du bliver nødt til at gøre noget som:
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;
}
}
For flere detaljer, se JDBC-selvstudiekapitlet Brug af transaktioner .
Og lær venligst om forberedte udsagn. Sammenkædning af værdier i en forespørgselsstreng er dårlig, fordi det kan føre til SQL-injektion eller mærkelige fejl, hvis du glemmer at escape-værdier. Se også JDBC-selvstudiekapitlet Brug af forberedte erklæringer .