English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

JDBC トランザクション

JDBC接続が自動コミットモード(デフォルトでは自動コミットモードです)になっている場合、各SQL文が完了するときに自動的にデータベースにコミットされます。これはシンプルなアプリケーションには良いかもしれませんが、以下の3つの理由から、自動コミットをオフにして自分自身のトランザクションを管理したいかもしれません。-

  • パフォーマンスを向上させるために

  • ビジネスプロセスの整合性を維持

  • 分散トランザクションを使用

トランザクションを使用すると、変更をデータベースに適用するかどうか、いつ適用するかを制御できます。単一のSQLステートメントやSQLステートメントのグループを一つの論理ユニットとして扱います。もし何かのステートメントが失敗した場合、トランザクション全体が失敗します。

JDBCドライバがデフォルトで使用するのではなく、手動トランザクションサポートを有効にするために、自動コミットスキーマを設定する場合は、ConnectionオブジェクトのsetAutoCommit()メソッド。setAutoCommit( )にフラグ値falseを渡すと、自動コミット機能がオフになります。フラグ値trueを渡すことで再度リブートできます。

例えば、connという名前のConnectionオブジェクトがある場合、自動コミットをオフにするための以下のコードを書いてください-

conn.setAutoCommit(false);

コミットおよびロールバック

変更を完了し、変更をコミットする前に、接続オブジェクト上でメソッドを呼び出しますcommit()、以下のようになります:

conn.commit( );

それ以外の場合、connを使用したデータベース更新をロールバックするには、以下のコードを使用してください-

conn.rollback( );

以下の例では、コミットおよびロールバックオブジェクトの使用法を説明します-

try{
   //connが有効な接続オブジェクトであると仮定します
   conn.setAutoCommit(false);
   Statement stmt = conn.createStatement();
   
   String SQL = "INSERT INTO Employees" +
                "VALUES (106, 20, 'Rita', 'Tez')";
   stmt.executeUpdate(SQL);  
   //形式が正しくないSQL文をコミットすると、中断されます。
   String SQL = "INSERTED IN Employees" +
                "VALUES (107, 22, 'Sita', 'Singh')";
   stmt.executeUpdate(SQL);
   // エラーが無ければ。
   conn.commit();
}catch(SQLException se){
   // エラーが発生した場合。
   conn.rollback();
}

この場合、上記のINSERT文はすべて成功せず、すべての内容がロールバックされます。

よりよく理解するために、以下を研究してみましょう「commitサンプルコード

Savepointを使用

新しいJDBC 3.0 Savepointインターフェースは、他のトランザクションコントロールを提供します。ほとんどの現代のDBMSは、OracleのPLなどの環境で保存点をサポートしています。 / SQL。

保存点を設定する際には、トランザクション内でロジカルロールバックポイントを定義できます。保存点の後でエラーが発生した場合、すべての変更を撤回するか、保存点の後で行った変更のみを撤回することができます。

Connectionオブジェクトには、保存点を管理するための新しいメソッドが2つあります。-

  • setSavepoint(String savepointName):新しい保存点を定義します。それと同時にSavepointオブジェクトも返します。

  • releaseSavepoint(Savepoint savepointName):保存点を削除してください。注意して、それにはSavepointオブジェクトが必要です。このオブジェクトは通常、setSavepoint()メソッドによって生成される保存点です。

rollback (String savepointName)メソッドは、指定された保存点までワークをロールバックできます。

以下の例では、Savepointオブジェクトの使用法を説明します-

try{
   //connが有効な接続オブジェクトであると仮定します
   conn.setAutoCommit(false);
   Statement stmt = conn.createStatement();
   
   //保存点を設定します
   Savepoint savepoint1 = conn.setSavepoint("Savepoint1);
   String SQL = "INSERT INTO Employees" +
                "VALUES (106, 20, 'Rita', 'Tez')";
   stmt.executeUpdate(SQL);  
   //形式が正しくないSQL文をコミットすると、中断されます。
   String SQL = "INSERTED IN Employees" +
                "VALUES (107, 22, 'Sita', 'Tez')";
   stmt.executeUpdate(SQL);
   // エラーがなければ、変更をコミットしてください。
   conn.commit();
}catch(SQLException se){
   // エラーが発生した場合。
   conn.rollback(savepoint1);
}

この場合、上記のINSERT文はすべて成功せず、すべての内容がロールバックされます。

よりよく理解するために、以下を研究しましょうサベポイント-サンプルコード