Dao Snippet
Connection connection = null;
try{
connection.setAutoCommit(false);
connection = session.getConnection(); // session here is HttpSession
Prepared Statement ...
executeUpdate(); // Step 1
insert(); // Step 2
executeUpdate(); Step 3
connection.commit();
}catch(SQLException e){
connection.rollback();
}finally{
connection.setAutoCommit(true);
}
После завершения вышеуказанного шага, пользователь нажимает на выход
try {
// Rollback all pending transactions
connection = session.getConnection(); // session here is HttpSession
connection.rollback();
} catch (Exception e) {
logger.error(e);
} finally {
try {
connection.close();
} catch (SQLException e) {
logger.error(e);
}
}
Я использую Java JDB C с Oracle.
Вопрос
Будет ли шаг 1/2/3 выполняться последовательно на уровне базы данных, скажем, шаг 1 занимает 2 минуты, шаг 2 занимает 1 минуту и шаг 3 всего несколько секунд.
Допустим, вышеописанный метод Dao завершается, и базовый db все еще выполняет обновления, и сразу же пользователь нажимает на выход из системы и вызывается код выхода из системы, который пытается выполнить откат () любой ожидающей транзакции и также закройте Соединение с БД.
Будет ли оно ждать завершения основной транзакции или произойдет откат.
Будет закрыто (), как-нибудь повлияет на незафиксированные транзакции
Действительно ли необходимо установить AutoCommit (true) в finally, я вижу блокировки в таблицах моей базы данных, если я не вызову этот оператор. В идеале commit () или rollback () должны вернуть БД в исходное состояние.