JavaとOracleは事務(JDBC事務)の実例を実現します。
JavaとOracleは事務(JDBC事務)の実例を実現します。
J 2 EEはJDBC事務、JTA事務、容器事務をサポートしています。ここではJDBC事務の実現について説明します。
JDBC事務はConnectionの対象によってコントロールされています。これは二つの事務モードを提供しています。
自分から提出するのは、JDBCの中です。接続先のConnectionにあります。デフォルトでは、各SQL文の実行は一つのトランザクション(つまりSQL文を実行するたびにすぐにデータベースに更新されます)として扱われます。
手動提出とは、複数のSQL文を一度に実行する必要がある場合、複数のSQL文を一つのトランザクションに構成する(すなわち、全部成功するか、または全部の操作をロールバックするか)場合、手動で提出しなければなりません。
サンプルを見てください
巨視的には、例えば以下の4つのステップが必要である。
1、事務モードを手動提出事務に設定する:
conn.set AutoCommt(false);
2、事務の隔離レベルを設定する:
conn.set Transation Isolation(Connection.TRANSACTION_)READ_COMMITTED)
3、提出事務:
conn.co mmit()
4、異常が発生したと仮定して、ロールバック業務:
conn.rollback()
上から見れば、JDBC事務のほうが便利ですが、Connectionオブジェクトによってコントロールされているので、事務の範囲は一つのデータベースの接続に限られていて、同じ事務で複数のデータベースを操作できないという欠点があります。
読んでくれてありがとうございます。みなさんのご協力をお願いします。ありがとうございます。
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オブジェクトによってコントロールされているので、事務の範囲は一つのデータベースの接続に限られていて、同じ事務で複数のデータベースを操作できないという欠点があります。
読んでくれてありがとうございます。みなさんのご協力をお願いします。ありがとうございます。