91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JAVA中的事務介紹

發布時間:2020-06-17 09:32:37 來源:億速云 閱讀:95 作者:Leah 欄目:編程語言

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

1、什么是Java事務

通常觀念認為,事務與數據庫有關。事務是訪問數據庫的一個操作序列,數據庫應用系統通過事務集來完成對數據庫的存取。事務的正確執行使得數據庫從一種狀態轉換成另一種狀態。

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

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

a、原子性

即不可分割性,事務要么全部被執行,要么就全部不被執行。如果事務的所有子事務全部提交成功,則所有的數據庫操作被提交,數據庫狀態發生轉換;如果有子事務失敗,則其他子事務的數據庫操作被回滾,即數據庫回到事務執行前的狀態,不會發生狀態轉換。

b、一致性

事務的執行使得數據庫從一種正確狀態轉換成另一種正確狀態。

c、隔離性

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

d、持久性

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

既然事務的概念從數據庫而來,那Java事務是什么?之間有什么聯系?

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

2、為什么需要事務

簡單一句話:保持數據的一致性。

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 語句結合到一個事務中。JDBC 事務的一個缺點是事務的范圍局限于一個數據庫連接。一個 JDBC 事務不能跨越多個數據庫。

b、JTA(Java Transaction API)事務

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

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

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

一個實現了這些接口的驅動程序將可以參與 JTA 事務。一個 XADataSource 對象就是一個 XAConnection 對象的工廠。 XAConnections 是參與 JTA 事務的 JDBC 連接,您將需要用應用服務器的管理工具設置 XADataSource 。

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

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

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

c、容器事務

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

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

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

d、JDBC事務的使用

(1)步驟:

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

然后,在try塊內添加事務的提交操作,表示操作無異常,提交事務:conn.commit();尤其不要忘記,在catch塊內添加回滾事務,表示操作出現異常,撤銷事務: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事務控制的局限性在一個數據庫連接內,但是其使用簡單。

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

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

5、總結

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

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

故城县| 临泽县| 新兴县| 神木县| 孙吴县| 中超| 岚皋县| 田阳县| 嘉善县| 黄大仙区| 壤塘县| 乳山市| 平安县| 韶山市| 澜沧| 庆元县| 长寿区| 花莲县| 康乐县| 新绛县| 桦甸市| 江安县| 天柱县| 分宜县| 高要市| 怀远县| 金坛市| 兰州市| 额济纳旗| 龙海市| 安塞县| 渝北区| 潼关县| 雷山县| 宁波市| 和田县| 红河县| 永春县| 晋江市| 盱眙县| 永德县|