Ответ
Auto-commit — это режим управления транзакциями в JDBC, при котором каждое отдельное SQL-выражение автоматически фиксируется (коммитится) в базе данных сразу после успешного выполнения.
Как работает:
- По умолчанию для нового соединения
auto-commit = true. - Каждый вызов
executeUpdate(),executeQuery()или аналогичный становится самостоятельной транзакцией. - Не требуется явно вызывать
connection.commit()илиconnection.rollback().
Пример включенного auto-commit:
Connection conn = dataSource.getConnection(); // auto-commit = true
Statement stmt = conn.createStatement();
// Каждая вставка — отдельная транзакция. Если вторая упадет, первая уже сохранена.
stmt.executeUpdate("INSERT INTO accounts (id, balance) VALUES (1, 1000)"); // Коммит 1
stmt.executeUpdate("INSERT INTO accounts (id, balance) VALUES (2, 2000)"); // Коммит 2
Когда использовать auto-commit?
- Простые одиночные операции, не требующие атомарности (например, логирование, единичные обновления).
- Скрипты для администрирования БД, где каждый запрос независим.
Когда НЕЛЬЗЯ использовать auto-commit?
- Группы операций, которые должны быть атомарными (например, перевод денег между счетами).
conn.setAutoCommit(false); // ВЫКЛЮЧАЕМ auto-commit try { stmt.executeUpdate("UPDATE accounts SET balance = balance - 100 WHERE id = 1"); stmt.executeUpdate("UPDATE accounts SET balance = balance + 100 WHERE id = 2"); conn.commit(); // Фиксируем ОБЕ операции вместе } catch (SQLException e) { conn.rollback(); // Откатываем ОБЕ операции в случае ошибки } - Пакетная обработка (
Batch) для повышения производительности.
Вывод: Auto-commit упрощает код для простых случаев, но для обеспечения целостности данных в сложных сценариях его необходимо отключать, управляя транзакциями вручную.