簡介 java的事務(wù)處理,如果對數(shù)據(jù)庫進行多次操作,每一次的執(zhí)行或步驟都是一個事務(wù).如果數(shù)據(jù)庫操作在某一步?jīng)]有執(zhí)行或出現(xiàn)異常而導(dǎo)致事務(wù)失敗,這樣有的事務(wù)被執(zhí)行有的就沒有被執(zhí)行,從而就有了事務(wù)的
回滾,取消先前的操作.....
Java中使用事務(wù)處理,首先要求數(shù)據(jù)庫支持事務(wù)。如使用MySQL的事務(wù)功能,就要求MySQL的表類型為Innodb才支持事務(wù)。否則,在Java程序中做了commit或rollback,但在數(shù)據(jù)庫中根本不能生效。
JavaBean中使用JDBC方式進行事務(wù)處理
public int delete(int sID) {
dbc = new DataBaseConnection();
Connection con = dbc.getConnection();
try {
con.setAutoCommit(false);// 更改JDBC事務(wù)的默認提交方式
dbc.executeUpdate("delete from xiao where ID=" + sID);
dbc.executeUpdate("delete from xiao_content where ID=" + sID);
dbc.executeUpdate("delete from xiao_affix where bylawid=" + sID);
con.commit();//提交JDBC事務(wù)
con.setAutoCommit(true);// 恢復(fù)JDBC事務(wù)的默認提交方式
dbc.close();
return 1;
}
catch (Exception exc) {
con.rollBack();//
回滾JDBC事務(wù)
exc.printStackTrace();
dbc.close();
return -1;
}
}
在數(shù)據(jù)庫操作中,一項事務(wù)是指由一條或多條對數(shù)據(jù)庫更新的sql語句所組成的一個不可分割的工作單元。只有當事務(wù)中的所有操作都正常完成了,整個事務(wù)才能被提交到數(shù)據(jù)庫,如果有一項操作沒有完成,就必須撤消整個事務(wù)。
例如在銀行的轉(zhuǎn)帳事務(wù)中,假定張三從自己的帳號上把1000元轉(zhuǎn)到李四的帳號上,相關(guān)的sql語句如下:
update account set monery=monery-1000 where name='zhangsan'
update account set monery=monery+1000 where name='lisi'
這個兩條語句必須作為一個完成的事務(wù)來處理。只有當兩條都成功執(zhí)行了,才能提交這個事務(wù)。如果有一句失敗,整個事務(wù)必須撤消。
在connection類中提供了3個控制事務(wù)的方法:
(1) setAutoCommit(Boolean autoCommit):設(shè)置是否自動提交事務(wù);
(2) commit();提交事務(wù);
(3) rollback();撤消事務(wù);
在jdbc api中,默認的情況為自動提交事務(wù),也就是說,每一條對數(shù)據(jù)庫的更新的sql語句代表一項事務(wù),操作成功后,系統(tǒng)自動調(diào)用commit()來提交,否則將調(diào)用rollback()來撤消事務(wù)。
在jdbc api中,可以通過調(diào)用setAutoCommit(false) 來禁止自動提交事務(wù)。然后就可以把多條更新數(shù)據(jù)庫的sql語句做為一個事務(wù),在所有操作完成之后,調(diào)用commit()來進行整體提交。倘若其中一項 sql操作失敗,就不會執(zhí)行commit()方法,而是產(chǎn)生相應(yīng)的sqlexception,此時就可以捕獲異常代碼塊中調(diào)用rollback()方法撤消事務(wù)。