我们有一个java应用程序,在此之前,所有操作都在多线程应用程序的run函数中完成。现在我们将一些代码移到一个单独的函数中。我们必须将一些变量作为全局变量包括连接,以便可以在函数中使用它。下面是运行和调用函数的框架。现在问题是那些在if语句中处理的查询并且它们遇到问题然后整个事情进入catch和rollback。现在的问题是那些在processOne函数中调用的问题,如果它们遇到任何catch,那么在执行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){
}
}
}
答案 0 :(得分: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
}
}
这样就可以回滚整个过程。