内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

JAVA中的事務介紹-創(chuàng)新互聯(lián)

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

成都創(chuàng)新互聯(lián)公司長期為近1000家客戶提供的網(wǎng)站建設服務,團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為敦煌企業(yè)提供專業(yè)的成都網(wǎng)站制作、網(wǎng)站設計、外貿(mào)網(wǎng)站建設,敦煌網(wǎng)站改版等技術(shù)服務。擁有十余年豐富建站經(jī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)絡計算機資源上訪問并且更新數(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 連接,您將需要用應用服務器的管理工具設置 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)步驟:

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

然后,在try塊內(nèi)添加事務的提交操作,表示操作無異常,提交事務:conn.commit();尤其不要忘記,在catch塊內(nèi)添加回滾事務,表示操作出現(xiàn)異常,撤銷事務:conn.rollback();最后,設置事務提交方式為自動提交: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)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

分享標題:JAVA中的事務介紹-創(chuàng)新互聯(lián)
網(wǎng)頁URL:http://www.rwnh.cn/article46/dcodhg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供服務器托管手機網(wǎng)站建設、做網(wǎng)站網(wǎng)站制作、微信公眾號、外貿(mào)網(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)

成都app開發(fā)公司
曲周县| 永顺县| 卢氏县| 湛江市| 蓬溪县| 浦北县| 古蔺县| 城步| 德钦县| 南部县| 武强县| 凉城县| 永福县| 常山县| 沧州市| 柘荣县| 商水县| 桂阳县| 民和| 瑞安市| 渭源县| 夏邑县| 溆浦县| 兴国县| 胶州市| 玛纳斯县| 鱼台县| 乐亭县| 安达市| 蚌埠市| 葵青区| 清丰县| 鹰潭市| 拉萨市| 望城县| 舟曲县| 宁津县| 昆山市| 林甸县| 鲁山县| 盐源县|