Maison  >  Article  >  Java  >  Quels sont les types de transactions Java et comment les utiliser

Quels sont les types de transactions Java et comment les utiliser

王林
王林avant
2023-05-08 21:55:211671parcourir

1. Les transactions JDBC

sont contrôlées par l'objet Connection L'interface Connection de JDBC propose deux modes de transaction : la soumission automatique et la soumission manuelle.

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

JDBC fournit la prise en charge la plus basique pour l'utilisation de Java pour effectuer des opérations de transaction de base de données. Plusieurs instructions SQL peuvent être placées dans la même transaction pour garantir leurs propriétés ACID.

Quand il s'agit d'opérations multi-bases de données ou de scénarios distribués, les transactions JDBC sont impuissantes.

2.JTA (Java Transaction API) transaction

JTA est une API de haut niveau, indépendante de la mise en œuvre et du protocole Les applications et les serveurs d'applications peuvent utiliser JTA pour accéder aux transactions. JTA permet aux applications d'effectuer des transactions distribuées - en accédant et en mettant à jour les données sur deux ou plusieurs ressources informatiques du réseau, qui peuvent être distribuées sur plusieurs bases de données. La prise en charge JTA du pilote JDBC améliore considérablement les capacités d'accès aux données.

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. Les transactions de conteneurs

Les transactions de conteneurs sont principalement fournies par des serveurs d'applications J2EE Les transactions de conteneurs sont principalement effectuées sur la base de JTA, qui est une implémentation d'API assez complexe basée sur JNDI.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer