Ответ
Да, может. В одной сессии (подключении) можно последовательно выполнить множество транзакций. Ключевое правило: в один момент времени активна только одна транзакция.
Типичный сценарий в JDBC:
Connection conn = dataSource.getConnection();
conn.setAutoCommit(false); // Отключаем автокоммит для ручного управления
try {
// Транзакция 1
PreparedStatement stmt1 = conn.prepareStatement("UPDATE accounts SET balance = ? WHERE id = ?");
// ... операции
conn.commit(); // Фиксация транзакции 1
// Транзакция 2 начинается автоматически после commit/rollback
PreparedStatement stmt2 = conn.prepareStatement("INSERT INTO log (message) VALUES (?)");
// ... операции
conn.commit(); // Фиксация транзакции 2
} catch (SQLException e) {
conn.rollback(); // Откат текущей (активной) транзакции при ошибке
} finally {
conn.close();
}
Пояснение:
- После
commit()илиrollback()текущая транзакция завершается. - Следующая SQL-команда (например,
INSERT,UPDATE) автоматически начинает новую транзакцию. - При
autoCommit = trueкаждая отдельная команда выполняется в своей короткой транзакции, которая коммитится сразу.