Pokud chcete provést atomicky více příkazů, musíte použít transakci. Připojení JDBC je ve výchozím nastavení nastaveno na režim „auto-commit“, což znamená, že každý příkaz je proveden ve své vlastní transakci. Nejprve tedy musíte deaktivovat režim automatického potvrzení pomocí Connection.setAutoCommit(false)
.
Pokud je režim automatického potvrzení vypnutý, provedené příkazy budou provedeny v aktuální transakci, pokud žádná aktuální transakce neexistuje, bude spuštěna. Tuto transakci pak lze potvrdit pomocí Connection.commit()
nebo vrátit zpět pomocí Connection.rollback()
.
Budete muset udělat něco jako:
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;
}
}
Další podrobnosti najdete v kapitole výukového programu JDBC Používání transakcí .
A přečtěte si prosím o připravených prohlášeních. Zřetězení hodnot do řetězce dotazu je špatné, protože může vést k vložení SQL nebo podivným chybám, pokud zapomenete hodnoty escape. Viz také kapitola výukového programu JDBC Použití připravených příkazů .