1

マルチスレッドアプリケーションの実行機能でこれがすべて行われる前に、Javaアプリケーションがあります。現在、いくつかのコードを別の関数に移動しています。関数で使用できるように、接続を含むいくつかの変数をグローバルとして作成する必要があります。以下は、関数の実行と呼び出しのスケルトンです。問題は、if ステートメントで処理されるクエリで問題が発生し、すべてがキャッチとロールバックになります。ここでの問題は、processOne 関数で呼び出されたものと、何かに遭遇した場合、else が実行された後に実行される一般的なクエリをキャッチすることです。processOneエラーを停止またはリンクする方法はありますか? 私たちの考えは、グローバル変数を使用することです。その中で dbConn.rollback を試してもうまくいくからです。

public void run() {
 try{
  if(){
    //process here
  }
  else{
    // call function processOne
  }
  //some other general queries
  dbconn.commit();
 }

 catch (SQLException ex){ 

  try{    
  dbconn.rollback();  
  } 
  catch (Exception rollback){    

  }
 }
}

void processOne(){
  try{
   //process queries here
  catch (SQLException ex){                         
    try{    
     dbconn.rollback();  
    } 
    catch (Exception rollback){    

    }
  }
}
4

1 に答える 1

2

関数から例外をスローし、processOneそれを'run`関数でキャッチして、トランザクションをロールバックするだけです。

public void run() {
 try{
  if(){
    //process here
  }
  else{
    // call function processOne
  }
  //some other general queries
  dbconn.commit();
 }

 catch (SQLException ex){ 

  try{    
  dbconn.rollback();  
  } 
  catch (Exception rollback){    

  }
 }

  catch (Exception ex){ 

  try{    
  dbconn.rollback();  
  } 
  catch (Exception rollback){    

  }
 }
}

void processOne() throws Exception{

   //process queries here

  }
}

このようにして、プロセス全体がロールバックされます。

于 2012-08-12T09:05:50.333 に答える