成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

JAVA中的事務介紹

這篇文章將為大家詳細講解有關(guān)JAVA中的事務介紹,文章內(nèi)容質(zhì)量較高,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

創(chuàng)新互聯(lián)建站專注于企業(yè)成都營銷網(wǎng)站建設(shè)、網(wǎng)站重做改版、璧山網(wǎng)站定制設(shè)計、自適應品牌網(wǎng)站建設(shè)、H5技術(shù)、商城網(wǎng)站建設(shè)、集團公司官網(wǎng)建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應式網(wǎng)頁設(shè)計等建站業(yè)務,價格優(yōu)惠性價比高,為璧山等各大城市提供網(wǎng)站開發(fā)制作服務。

1、什么是Java事務

通常觀念認為,事務與數(shù)據(jù)庫有關(guān)。事務是訪問數(shù)據(jù)庫的一個操作序列,數(shù)據(jù)庫應用系統(tǒng)通過事務集來完成對數(shù)據(jù)庫的存取。事務的正確執(zhí)行使得數(shù)據(jù)庫從一種狀態(tài)轉(zhuǎn)換成另一種狀態(tài)。

事務必須服從ISO/IEC所制定的ACID原則。

ACID是原子性(atomicity)、一致性(consistency)、隔離性(isolation)和持久性(durability)的縮寫事務必須服從ISO/IEC所制定的ACID原則。ACID是原子性(atomicity)、一致性(consistency)、隔離性(isolation)和持久性(durability)的縮寫。

a、原子性

即不可分割性,事務要么全部被執(zhí)行,要么就全部不被執(zhí)行。如果事務的所有子事務全部提交成功,則所有的數(shù)據(jù)庫操作被提交,數(shù)據(jù)庫狀態(tài)發(fā)生轉(zhuǎn)換;如果有子事務失敗,則其他子事務的數(shù)據(jù)庫操作被回滾,即數(shù)據(jù)庫回到事務執(zhí)行前的狀態(tài),不會發(fā)生狀態(tài)轉(zhuǎn)換。

b、一致性

事務的執(zhí)行使得數(shù)據(jù)庫從一種正確狀態(tài)轉(zhuǎn)換成另一種正確狀態(tài)。

c、隔離性

在事務正確提交之前,不允許把該事務對數(shù)據(jù)的任何改變提供給任何其他事務,即在事務正確提交之前,它可能的結(jié)果不應顯示給任何其他事務。

d、持久性

事務正確提交后,其結(jié)果將永久保存在數(shù)據(jù)庫中,即使在事務提交后有了其他故障,事務的處理結(jié)果也會得到保存。

既然事務的概念從數(shù)據(jù)庫而來,那Java事務是什么?之間有什么聯(lián)系?

實際上,一個Java應用系統(tǒng),如果操作數(shù)據(jù)庫,通過JDBC來實現(xiàn)的。那么增加、修改、刪除都是通過相應方法間接來實現(xiàn)的,事務的控制也相應轉(zhuǎn)移到Java程序代碼中。因此,數(shù)據(jù)庫操作的事務習慣上就稱為Java事務。

2、為什么需要事務

簡單一句話:保持數(shù)據(jù)的一致性。

3、Java事務類型

Java事務的類型有三種:JDBC事務、JTA(Java Transaction API)事務、容器事務。這里都是最簡單的介紹,最后還會介紹下jdbc事務的使用,其他兩種大家可以自己搜下學習下。

a、JDBC事務

JDBC 事務是用 Connection 對象控制的。JDBC Connection 接口( java.sql.Connection )提供了兩種事務模式:自動提交和手工提交。 java.sql.Connection 提供了以下控制事務的方法:

 public void setAutoCommit(boolean)
 public boolean getAutoCommit()
 public void commit()
 public void rollback()

使用 JDBC 事務界定時,您可以將多個 SQL 語句結(jié)合到一個事務中。JDBC 事務的一個缺點是事務的范圍局限于一個數(shù)據(jù)庫連接。一個 JDBC 事務不能跨越多個數(shù)據(jù)庫。

b、JTA(Java Transaction API)事務

JTA是一種高層的,與實現(xiàn)無關(guān)的,與協(xié)議無關(guān)的API,應用程序和應用服務器可以使用JTA來訪問事務。

JTA允許應用程序執(zhí)行分布式事務處理--在兩個或多個網(wǎng)絡(luò)計算機資源上訪問并且更新數(shù)據(jù),這些數(shù)據(jù)可以分布在多個數(shù)據(jù)庫上。JDBC驅(qū)動程序的JTA支持極大地增強了數(shù)據(jù)訪問能力。

如果計劃用 JTA 界定事務,那么就需要有一個實現(xiàn) javax.sql.XADataSource 、 javax.sql.XAConnection 和 javax.sql.XAResource 接口的 JDBC 驅(qū)動程序。

一個實現(xiàn)了這些接口的驅(qū)動程序?qū)⒖梢詤⑴c JTA 事務。一個 XADataSource 對象就是一個 XAConnection 對象的工廠。 XAConnections 是參與 JTA 事務的 JDBC 連接,您將需要用應用服務器的管理工具設(shè)置 XADataSource 。

J2EE 應用程序用 JNDI 查詢數(shù)據(jù)源。一旦應用程序找到了數(shù)據(jù)源對象,它就調(diào)用 javax.sql.DataSource.getConnection() 以獲得到數(shù)據(jù)庫的連接。

XA 連接與非 XA 連接不同。一定要記住 XA 連接參與了 JTA 事務。這意味著 XA 連接不支持 JDBC 的自動提交功能。同時,應用程序一定不要對 XA 連接調(diào)用 java.sql.Connection.commit() 或者 java.sql.Connection.rollback() 。

相反,應用程序應該使用 UserTransaction.begin()、 UserTransaction.commit() 和 serTransaction.rollback() 。

c、容器事務

容器事務主要是J2EE應用服務器提供的,容器事務大多是基于JTA完成,這是一個基于JNDI的,相當復雜的API實現(xiàn)。相對編碼實現(xiàn)JTA事務管理,我們可以通過EJB容器提供的容器事務管理機制(CMT)完成同一個功能,這項功能由J2EE應用服務器提供。

這使得我們可以簡單的指定將哪個方法加入事務,一旦指定,容器將負責事務管理任務。這是我們土建的解決方式,因為通過這種方式我們可以將事務代碼排除在邏輯編碼之外,同時將所有困難交給J2EE容器去解決。

使用EJB CMT的另外一個好處就是程序員無需關(guān)心JTA API的編碼,不過,理論上我們必須使用EJB。

d、JDBC事務的使用

(1)步驟:

首先,設(shè)置事務的提交方式為非自動提交:conn.setAutoCommit(false);接下來,將需要添加事務的代碼放入try,catch塊中。

然后,在try塊內(nèi)添加事務的提交操作,表示操作無異常,提交事務:conn.commit();尤其不要忘記,在catch塊內(nèi)添加回滾事務,表示操作出現(xiàn)異常,撤銷事務:conn.rollback();最后,設(shè)置事務提交方式為自動提交:conn.setAutoCommit(true);這樣,通過簡單的幾步,我們就可以完成對事務處理的編寫了。

(2)偽代碼:

con = DriverManager.getConnection(url, user, password);
String result = "";
String sql1 = "";
// LAST_INSERT_ID() 獲取剛剛插入的自動遞增的ID
String sql2 = "";
int flag;
try {
    con.setAutoCommit(false);// 更改JDBC事務的默認提交方式
    pstmt = con.prepareStatement(sql1);
    flag = pstmt.executeUpdate();
    if (flag > 0) {
        pstmt = con.prepareStatement(sql2);
        int i = pstmt.executeUpdate();
        if (i > 0) {
            con.commit();//提交JDBC事務
            result = "add data success!!";
        } else {
            result = "add data fail!!";
       }
    } else {
        result = "add data fail!!";
    }
} catch (SQLException e) {
    try {
        con.rollback();//回滾JDBC事務
    } catch (SQLException e1) {
    // TODO Auto-generated catch block
        result = "add data fail!! SQLException";
        e1.printStackTrace();
    }
    result = "add data fail!! SQLException";
    e.printStackTrace();
} finally {
    try {
        con.setAutoCommit(true); // 恢復JDBC事務的默認提交方式
    } catch (SQLException e) {
    // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
return result;

4、三種事務差異

1、JDBC事務控制的局限性在一個數(shù)據(jù)庫連接內(nèi),但是其使用簡單。

2、JTA事務的功能強大,事務可以跨越多個數(shù)據(jù)庫或多個DAO,使用也比較復雜。

3、容器事務,主要指的是J2EE應用服務器提供的事務管理,局限于EJB應用使用。

5、總結(jié)

事務控制是構(gòu)建J2EE應用不可缺少的一部分,合理選擇應用何種事務對整個應用系統(tǒng)來說至關(guān)重要。一般說來,在單個JDBC 連接連接的情況下可以選擇JDBC事務,在跨多個連接或者數(shù)據(jù)庫情況下,需要選擇使用JTA事務,如果用到了EJB,則可以考慮使用EJB容器事務。

關(guān)于JAVA中的事務介紹就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

分享題目:JAVA中的事務介紹
轉(zhuǎn)載源于:http://jinyejixie.com/article10/gdjigo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、、定制開發(fā)、微信小程序、移動網(wǎng)站建設(shè)動態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
中宁县| 汉川市| 涪陵区| 枣强县| 柯坪县| 广灵县| 连南| 桑日县| 茂名市| 平谷区| 儋州市| 沛县| 内丘县| 庄浪县| 山东省| 黑龙江省| 垫江县| 黑龙江省| 巴马| 通河县| 炎陵县| 腾冲县| 双辽市| 保靖县| 大名县| 长治县| 高邑县| 谷城县| 南昌市| 含山县| 马山县| 紫金县| 招远市| 肥东县| 五河县| 延吉市| 梅河口市| 鸡西市| 黄陵县| 临桂县| 廊坊市|