1.JDBC トランザクション
Connection オブジェクトを使用して制御する 、JDBC の Connection インターフェイスには、自動送信と手動送信の 2 つのトランザクション モードが用意されています。
public void setAutoCommit(boolean) public boolean getAutoCommit() public void commit() public void rollback()
JDBC は、Java を使用してデータベース トランザクション操作を実行するための最も基本的なサポートを提供します。複数の SQL ステートメントを同じトランザクションに配置して、ACID プロパティを確保できます。
複数データベース操作や分散シナリオに関しては、JDBC トランザクションは無力です。
2.JTA (Java トランザクション API) トランザクション
JTA は、実装に依存せず、プロトコルに依存しない高レベルの API です。アプリケーションとアプリケーション サーバーは、JTA を使用してトランザクションにアクセスできます。 JTA を使用すると、アプリケーションは分散トランザクションを実行できます。つまり、複数のデータベースに分散できる 2 つ以上のネットワーク コンピュータ リソース上のデータにアクセスして更新することができます。 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 中国語 Web サイトの他の関連記事を参照してください。