Om du vill utföra flera uttalanden atomiskt måste du använda en transaktion. En JDBC-anslutning har som standard "auto-commit"-läge, vilket innebär att varje sats exekveras i sin egen transaktion. Så du måste först inaktivera auto-commit-läget med Connection.setAutoCommit(false)
.
Med auto-commit-läget inaktiverat kommer körda satser att köras i den aktuella transaktionen, om det inte finns någon aktuell transaktion kommer en att startas. Denna transaktion kan sedan antingen utföras med Connection.commit()
eller återställs med Connection.rollback()
.
Du måste göra något 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;
}
}
För mer information, se JDBC självstudiekapitlet Använda transaktioner .
Och snälla lär dig om förberedda uttalanden. Att sammanfoga värden till en frågesträng är dåligt, eftersom det kan leda till SQL-injektion eller konstiga fel om du glömmer att escape-värden. Se även kapitlet om JDBC självstudier Använda förberedda uttalanden .