Ако искате да изпълните няколко оператора атомарно, трябва да използвате транзакция. JDBC връзката по подразбиране е в режим на „автоматично извършване“, което означава, че всеки оператор се изпълнява в собствена транзакция. Така че първо трябва да деактивирате режима на автоматично записване, като използвате Connection.setAutoCommit(false)
.
При деактивиран режим на автоматично записване, изпълнените оператори ще бъдат изпълнени в текущата транзакция, ако няма текуща транзакция, ще бъде стартирана такава. След това тази транзакция може да бъде извършена или чрез Connection.commit()
или връщане назад с помощта на Connection.rollback()
.
Ще трябва да направите нещо като:
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;
}
}
За повече подробности вижте глава от урока за JDBC Използване на транзакции .
И моля, научете за подготвените изявления. Конкатенирането на стойности в низ на заявка е лошо, защото може да доведе до SQL инжекция или странни грешки, ако забравите да избягате стойности. Вижте също глава за урока за JDBC Използване на подготвени изявления .