1

我们有一个 java 应用程序,在此之前,这一切都是在多线程应用程序的 run 函数中完成的。现在我们将一些代码移到一个单独的函数中。我们必须将一些变量设置为全局变量,包括连接,以便它可以在函数中使用。下面是函数的运行和调用的骨架。现在的问题是那些在 if 语句中处理的查询并且它们遇到问题然后整个事情进入捕获和回滚。现在的问题是那些在 processOne 函数中调用的函数,如果它们遇到任何问题,则会捕获在 if 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函数中抛出一个异常,然后在“运行”函数中捕获它并回滚事务:

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 回答