JavaとOracleは事務(JDBC事務)の実例を実現します。

2660 ワード

JavaとOracleは事務(JDBC事務)の実例を実現します。
J 2 EEはJDBC事務、JTA事務、容器事務をサポートしています。ここではJDBC事務の実現について説明します。
       JDBC事務はConnectionの対象によってコントロールされています。これは二つの事務モードを提供しています。
       自分から提出するのは、JDBCの中です。接続先のConnectionにあります。デフォルトでは、各SQL文の実行は一つのトランザクション(つまりSQL文を実行するたびにすぐにデータベースに更新されます)として扱われます。
       手動提出とは、複数のSQL文を一度に実行する必要がある場合、複数のSQL文を一つのトランザクションに構成する(すなわち、全部成功するか、または全部の操作をロールバックするか)場合、手動で提出しなければなりません。
        サンプルを見てください       

import java.sql.*;

public class TransactionTest{

public static void main(String[] args) throws SQLException {
 try {
     Class.forName("oracle.jdbc.driver.OracleDriver");
        Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","TransactionTest","123456");
  
        //              :
        conn.setAutoCommit(false);
  
        //         。
        conn.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
        
 //      
        String sqlInsert = "insert into t_user(userName,userPassword) values(?,?
)";        
        pstmt = conn.prepareStatement(sqlInsert);
        pstmt.setString(1, "danny");
        pstmt.setString(2, "123");
        pstmt.executeUpdate();
  
 //      
        String sqlUpdate = "update t_user set userPassword=? where userName = ?";
        pstmt = conn.prepareStatement(sqlUpdate);
        pstmt.setString(1, "123456");
        pstmt.setString(2, "danny");        
        pstmt.executeUpdate();
  
        //    
        conn.commit();
  
      } catch (Exception e) {        
        //        ,    
        conn.rollback();
      }finally{        
        if (pstmt!=null) {
          pstmt.close();
        }
        if (conn!=null) {
          conn.close();
        }
      }
}
}

       この2つの操作を挿入して更新する必要があるとき、または両方の操作が成功します。失敗があると仮定します。すべての操作をキャンセルします。
       巨視的には、例えば以下の4つのステップが必要である。    
       1、事務モードを手動提出事務に設定する:
             conn.set AutoCommt(false);
       2、事務の隔離レベルを設定する:
             conn.set Transation Isolation(Connection.TRANSACTION_)READ_COMMITTED)
       3、提出事務:
             conn.co mmit()
       4、異常が発生したと仮定して、ロールバック業務:
             conn.rollback()
       上から見れば、JDBC事務のほうが便利ですが、Connectionオブジェクトによってコントロールされているので、事務の範囲は一つのデータベースの接続に限られていて、同じ事務で複数のデータベースを操作できないという欠点があります。
読んでくれてありがとうございます。みなさんのご協力をお願いします。ありがとうございます。