java中事務的管理
什麽是事務:
事務,就是一組操作數據庫的動作集合。
一組處理步驟或者全部發生或者一步也不執行,我們稱該組處理步驟為一個事務。當所有的步驟像一個操作一樣被完整地執行,我們稱該事務被提交。由於其中的一部分或多步執行失敗,導致沒有步驟被提交,則事務必須回滾到最初的系統狀態。
事務必須滿足ACID原則。ACID是原子性(atomicity)、一致性(consistency)、隔離性(isolation)和持久性(durability)的縮寫。
事務的原子性表示事務執行過程中的任何失敗都將導致事務所做的任何修改失效。一致性表示當事務執行失敗時,所有被該事務影響的數據都應該恢復到事務執行前的狀態。隔離性表示在事務執行過程中對數據的修改,在事務提交之前對其他事務不可見。持久性表示當系統或介質發生故障時,確保已提交事務的更新不能丟失。持久性通過數據庫備份和恢復來保證。
Java中的事務處理
一般J2EE服務器支持三種類型的事務管理。即:JDBC事務,JTA事務,容器管理事務。
最好不要在程序中同時使用上述三種事務類型;並且,事務要在盡可能短的時間內完成,不要在不同方法中實現事務的使用。下面舉兩個例子說明JDBC及JTA事務,容器管理事務是在特定的框架中實現的(如:Spring的事務管理)
1. JDBC事務
public String delete(String id) {
String ID = id;
db = new getConnection();
Connection con = db.getConnection();
try {
con.setAutoCommit(false);
db.executeUpdate("delete from helloworld where ID=" + ID); //更新操作1
db.executeUpdate("delete from helloworld _book where ID=" + ID); //更新操作2
db.executeUpdate("delete from helloworld_user where ID=" + ID); //更新操作3
con.commit();//提交JDBC事務
con.setAutoCommit(true);
db.close();
return “success”;
}catch (Exception e) {
con.rollBack();//回滾JDBC事務
e.printStackTrace();
db.close();
return “fail”;
}
}
如上例:更新操作1,2,3只有當三步操作都成功完成才進行提交,否則回滾已經進行的操作。這樣,保證了數據的完整性,不會因為突然斷電等特殊情況導致的數據錯誤。
2.JTA事務
JTA是J2EE事務服務的解決方案、描述了J2EE模型事務接口。JTA具有三個主要的接口:UserTransaction、TransactionManager、Transaction接口。這些接口共享公共的事務操作,如:commit()、rollback()。同時各自也有自己的操作。舉例說明:
public String delete(String id) {
String ID = id;
db = new getConnection();
db.getConnection();
UserTransaction transaction = sessionContext.getUserTransaction();//獲得JTA事務
try {
transaction.begin(); //開始JTA事務
db.executeUpdate("delete from helloworld where ID=" + ID);
db.executeUpdate("delete from helloworld _book where ID=" + ID);
db.executeUpdate("delete from helloworld _user where ID=" + ID);
transaction.commit(); //提交JTA事務
db.close();
return”success”;
} catch (Exception e) {
try {
transaction.rollback();//事務回滾
}catch (Exception e) {
e.printStackTrace();
}
exc.printStackTrace();
db.close();
return “fail”;
}
}
3.容器事務管理
在Spring、Hibernate等框架中都有各自的事務管理功能。雖然表現形式有些差別,但都是在JAVA事務管理的基礎上實現的。這裏不進行介紹。
java中事務的管理