我试图更改自动提交状态,并根据条件稍后更新。但是在10次中,数据没有被提交,因为自动提交状态正在改变一些方式。我无法弄清楚如何。
我已在下面附上我的代码。
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)
,也不会提交记录。
答案 0 :(得分:1)
即使我正在调用setAutocommit(true),也不会提交记录。
不会。您必须显式提交它,因为您已在方法的开头将autoCommit设置为false。
removeEmployee(){
boolean committed = false;
conn = DbManager.getConnection();
boolean initValue = conn.getAutoCommit(); //save the initial value
conn.getAutoCommit(false); //explicitly set it to false to control the transaction
stat = conn.createStatement();
int updated = stat.executeUpdate(updateSql);
if (updated > 0) {
boolean credit = isCreditPeding();
System.out.println("Is Credit:"+credit);
if(credit){
con.commit();//explicitly commit
committed = true;
}else{
conn.rollback();//explicitly rollback
}
}
}
con.setAutoCommit(initValue);
return committed;