Heim  >  Artikel  >  Java  >  Welche Arten von Java-Transaktionen gibt es und wie werden sie verwendet?

Welche Arten von Java-Transaktionen gibt es und wie werden sie verwendet?

王林
王林nach vorne
2023-05-08 21:55:211721Durchsuche

1.JDBC-Transaktion

Verbindungsobjektsteuerung verwenden, die Verbindungsschnittstelle von JDBC bietet zwei Transaktionsmodi: automatische Übermittlung, manuelle Übermittlung .

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

JDBC bietet die grundlegendste Unterstützung für die Verwendung von Java zur Durchführung von Datenbanktransaktionsvorgängen. Mehrere SQL-Anweisungen können in dieselbe Transaktion eingefügt werden, um ihre ACID-Eigenschaften sicherzustellen.

Wenn es um Operationen mit mehreren Datenbanken oder verteilte Szenarien geht, sind JDBC-Transaktionen machtlos.

2.JTA (Java Transaction API)-Transaktion

JTA ist eine High-Level-, Implementierungs-unabhängige und A Protokollunabhängige API , die Anwendungen und Anwendungsserver verwenden können, um über JTA auf Transaktionen zuzugreifen. JTA ermöglicht Anwendungen die Durchführung verteilter Transaktionen – den Zugriff auf und die Aktualisierung von Daten auf zwei oder mehr Netzwerkcomputerressourcen, die über mehrere Datenbanken verteilt sein können. Die JTA-Unterstützung des JDBC-Treibers verbessert die Datenzugriffsmöglichkeiten erheblich.

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. Containertransaktion

Containertransaktion

wird hauptsächlich vom J2EE-Anwendungsserver bereitgestellt wird auf Basis von JTA abgeschlossen, einer recht komplexen API-Implementierung auf Basis von JNDI.

Das obige ist der detaillierte Inhalt vonWelche Arten von Java-Transaktionen gibt es und wie werden sie verwendet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen