首頁  >  文章  >  Java  >  java事務的類型有哪些及怎麼使用

java事務的類型有哪些及怎麼使用

王林
王林轉載
2023-05-08 21:55:211726瀏覽

1.JDBC交易

用 Connection 物件控制,JDBC 的 Connection 介面提供了兩個交易模式:自動提交、手動提交。

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

JDBC 為使用 Java 進行資料庫的事務操作提供了最基本的支援。可以將多個 SQL 語句放到同一個交易中,保證其 ACID 特性。

涉及多資料庫的操作或是分散式場景,JDBC事務就無能為力了。

2.JTA(Java Transaction API)事務

JTA是一種高層的,與實作無關的,與協定無關的API ,應用程式和應用程式伺服器可以使用JTA來存取事務。 JTA允許應用程式執行分散式事務處理--在兩個或多個網路電腦資源上存取並且更新數據,這些數據可以分佈在多個資料庫上。 JDBC驅動程式的JTA支援大大增強了資料存取能力。

public void JtaTransfer() { 
        javax.transaction.UserTransaction tx = null;
        java.sql.Connection conn = null;
         try{ 
             tx = (javax.transaction.UserTransaction) context.lookup("java:comp/UserTransaction");  //取得JTA事务,本例中是由Jboss容器管理
             javax.sql.DataSource ds = (javax.sql.DataSource) context.lookup("java:/XAOracleDS");  //取得数据库连接池,必须有支持XA的数据库、驱动程序  
             tx.begin();
            conn = ds.getConnection();
             // 将自动提交设置为 false,
             //若设置为 true 则数据库将会把每一次数据更新认定为一个事务并自动提交
             conn.setAutoCommit(false);
             stmt = conn.createStatement(); 
             // 将 A 账户中的金额减少 500 
             stmt.execute("\
             update t_account set amount = amount - 500 where account_id = 'A'");
             // 将 B 账户中的金额增加 500 
             stmt.execute("\
             update t_account set amount = amount + 500 where account_id = 'B'");
             // 提交事务
             tx.commit();
             // 事务提交:转账的两步操作同时成功
         } catch(SQLException sqle){            
             try{ 
                 // 发生异常,回滚在本事务中的操做
              tx.rollback();
                 // 事务回滚:转账的两步操作完全撤销
                 stmt.close(); 
                 conn.close(); 
             }catch(Exception ignore){ 
             } 
             sqle.printStackTrace(); 
         } 
     }

3.容器事務

容器事務主要是J2EE應用伺服器提供的,容器事務大多是基於JTA完成,這是一個基於JNDI的,相當複雜的API實作。

以上是java事務的類型有哪些及怎麼使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除