Я пытался изменить статус автоматического фиксации и обновить его позже в зависимости от состояния. Но один раз в 10 раз данные не становятся фиксированными, поскольку статус автоматической фиксации изменяется каким-то образом. Я не могу узнать, как это сделать.Autocommit не всегда все время
Я приложил свой код ниже.
removeEmployee(){
conn = DbManager.getConnection();
conn.setAutoCommit(false);
stat = conn.createStatement();
int updated = stat.executeUpdate(updateSql);
if (updated > 0) {
boolean credit = isCreditPeding();
System.out.println("Is Credit:"+credit);
if(credit){
System.out.println("Condition"+!conn.getAutoCommit());
if (!conn.getAutoCommit()) {
conn.setAutoCommit(false);
conn.commit();
}
conn.setAutoCommit(true);
return true;
}else{
conn.rollback();
conn.setAutoCommit(true);
}
}
}
Result (During error)
Is Credit:true
condition:false
Соединение не модифицировано в методе isCreditPending()
. Запись не выполняется, даже если я звоню setAutocommit(true)
.
Я упомянул об этом, потому что в java-документах autoComit говорится, что это ложь. ** ПРИМЕЧАНИЕ. Если этот метод вызывается во время транзакции и изменяется режим автоматической фиксации, транзакция фиксируется. Если вызывается setAutoCommit, и режим автоматической фиксации не изменяется, вызов не работает. ** –
Вы правы. Это так. И вы видите беспорядочное поведение. ИМХО, лучше контролировать свои транзакции с явными коммитами и/или откатами. http://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html – ramp