2011-11-08 6 views
1

セイフティを確保するために、私はこのようなコードにアクセスするすべてのデータベース記述する必要があります:この例ではこのようなトランザクションとしてすべてのデータベースアクセスを書き込む必要がありますか?


public void updateOrder(OrderData order) throw Exception { 
      .... 
      coon.setAutoCommit(false); 
      Statement stmt = conn.createStatement(); 
      String sql = "update order set .... where "; 
      try { 
       stmt.executeUpdate(sql); 
       conn.commit(); 
      } catch (Exception e) { 
       conn.rollback(); 
      } finally {

}

}

を、私は1つのテーブルへのアクセスのみを持って、私はまだする必要がありますかトランザクションとして扱いますか?このようなトランザクションとしてすべてのデータベースアクセスを書き込む必要がありますか?

答えて

0

これは、複数のSQLの更新と挿入があるかどうかによって異なります。単一の更新または挿入を実行している場合、暗黙的にトランザクション内で実行されます。

+0

JDBC内の文は暗黙的にトランザクション内で実行されますが、唯一の違いは自動コミットの動作です。false true:false:文がコミットされず、トランザクションがアクティブでない場合は文が新しいトランザクションを開始します。 true:ステートメントは完了したときにコミットし、次のステートメントは新しいトランザクションを開始します。 –

0

autoCommitでは、データベース(またはJDBCドライバ)が個別に実行された文のトランザクションを開始およびコミットします。 これが実行される唯一のステートメントであれば、autoCommitをfalseに設定する必要はなく、自分でコミットまたはロールバックを処理する必要もありません。

一方、アトミックにコミットまたはロールバックする必要がある複数のステートメントを実行する場合は、自動コミットを無効にする必要があります。

関連する問題