java的事务类型及定义
生活随笔
收集整理的這篇文章主要介紹了
java的事务类型及定义
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
轉(zhuǎn)載: 什么是事務(wù): 首先,說說什么事務(wù)。我認為事務(wù),就是一組操作數(shù)據(jù)庫的動作集合。 事務(wù)是現(xiàn)代數(shù)據(jù)庫理論中的核心概念之一。如果一組處理步驟或者全部發(fā)生或者一步也不執(zhí)行,我們稱該組處理步驟為一個事務(wù)。當所有的步驟像一個操作一樣被完整地執(zhí)行,我們稱該事務(wù)被提交。由于其中的一部分或多步執(zhí)行失敗,導(dǎo)致沒有步驟被提交,則事務(wù)必須回滾到最初的系統(tǒng)狀態(tài)。 事務(wù)必須服從ISO/IEC所制定的ACID原則。ACID是原子性(atomicity)、一致性(consistency)、隔離性(isolation)和持久性(durability)的縮寫。事務(wù)的原子性表示事務(wù)執(zhí)行過程中的任何失敗都將導(dǎo)致事務(wù)所做的任何修改失效。一致性表示當事務(wù)執(zhí)行失敗時,所有被該事務(wù)影響的數(shù)據(jù)都應(yīng)該恢復(fù)到事務(wù)執(zhí)行前的狀態(tài)。隔離性表示在事務(wù)執(zhí)行過程中對數(shù)據(jù)的修改,在事務(wù)提交之前對其他事務(wù)不可見。持久性表示當系統(tǒng)或介質(zhì)發(fā)生故障時,確保已提交事務(wù)的更新不能丟失。持久性通過數(shù)據(jù)庫備份和恢復(fù)來保證。
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事務(wù)
con.setAutoCommit(true);?
db.close();
return?“success”;
}
catch?(Exception?e)?{
con.rollBack();//回滾JDBC事務(wù)
e.printStackTrace();
db.close();
return?“fail”;
}
}
? 如上例:更新操作1,2,3只有當三步操作都成功完成才進行提交,否則回滾已經(jīng)進行的操作。這樣,保證了數(shù)據(jù)的完整性,不會因為突然斷電等特殊情況導(dǎo)致的數(shù)據(jù)錯誤。 2.JTA事務(wù) JTA是J2EE事務(wù)服務(wù)的解決方案、描述了J2EE模型事務(wù)接口。JTA具有三個主要的接口:UserTransaction、TransactionManager、Transaction接口。這些接口共享公共的事務(wù)操作,如:commit()、rollback()。同時各自也有自己的操作。舉例說明: public?String?delete(String?id)?{
?String?ID?=?id;
db?=?new?getConnection();
db.getConnection();
UserTransaction?transaction?=?sessionContext.getUserTransaction();//獲得JTA事務(wù)
try?{
transaction.begin();?//開始JTA事務(wù)
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事務(wù)
db.close();
return”success”;
}
catch?(Exception?e)?{
try?{
transaction.rollback();//事務(wù)回滾
}
catch?(Exception?e)?{
e.printStackTrace();
}
exc.printStackTrace();
db.close();
return?“fail”;
}
}?
3.容器事務(wù)管理 在Spring、Hibernate等框架中都有各自的事務(wù)管理功能。雖然表現(xiàn)形式有些差別,但都是在JAVA事務(wù)管理的基礎(chǔ)上實現(xiàn)的。這里不進行介紹。
?
Java中的事務(wù)處理 一般J2EE服務(wù)器支持三種類型的事務(wù)管理。即:JDBC事務(wù),JTA事務(wù),容器管理事務(wù)。 最好不要在程序中同時使用上述三種事務(wù)類型;并且,事務(wù)要在盡可能短的時間內(nèi)完成,不要在不同方法中實現(xiàn)事務(wù)的使用。下面舉兩個例子說明JDBC及JTA事務(wù),容器管理事務(wù)是在特定的框架中實現(xiàn)的(如:Spring的事務(wù)管理) 1. JDBC事務(wù) 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事務(wù)
con.setAutoCommit(true);?
db.close();
return?“success”;
}
catch?(Exception?e)?{
con.rollBack();//回滾JDBC事務(wù)
e.printStackTrace();
db.close();
return?“fail”;
}
}
? 如上例:更新操作1,2,3只有當三步操作都成功完成才進行提交,否則回滾已經(jīng)進行的操作。這樣,保證了數(shù)據(jù)的完整性,不會因為突然斷電等特殊情況導(dǎo)致的數(shù)據(jù)錯誤。 2.JTA事務(wù) JTA是J2EE事務(wù)服務(wù)的解決方案、描述了J2EE模型事務(wù)接口。JTA具有三個主要的接口:UserTransaction、TransactionManager、Transaction接口。這些接口共享公共的事務(wù)操作,如:commit()、rollback()。同時各自也有自己的操作。舉例說明: public?String?delete(String?id)?{
?String?ID?=?id;
db?=?new?getConnection();
db.getConnection();
UserTransaction?transaction?=?sessionContext.getUserTransaction();//獲得JTA事務(wù)
try?{
transaction.begin();?//開始JTA事務(wù)
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事務(wù)
db.close();
return”success”;
}
catch?(Exception?e)?{
try?{
transaction.rollback();//事務(wù)回滾
}
catch?(Exception?e)?{
e.printStackTrace();
}
exc.printStackTrace();
db.close();
return?“fail”;
}
}?
3.容器事務(wù)管理 在Spring、Hibernate等框架中都有各自的事務(wù)管理功能。雖然表現(xiàn)形式有些差別,但都是在JAVA事務(wù)管理的基礎(chǔ)上實現(xiàn)的。這里不進行介紹。
轉(zhuǎn)載于:https://www.cnblogs.com/zjdxr-up/p/6690547.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的java的事务类型及定义的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。