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中文網其他相關文章!