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

Quels sont les types de transactions Java et comment les utiliser

王林
Libérer: 2023-05-08 21:55:21
avant
1756 Les gens l'ont consulté

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()
Copier après la connexion

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(); 
         } 
     }
Copier après la connexion

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!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal