2011-05-28 100 views
0

的方法执行多个任务:例外喜抽象级别的方法

public void method() { 

    try { 
     task1(); //may throw sql exception 
     task2(); //may throw sql exception 
     task3(); //may throw sql exception 
    } catch (SQLException se) { 
     //from which line cames the exception? 
    } 

我正在寻找一个标准,在这些情况下采用。
当前我的想法是这样的:
1)如果我需要根据引发异常的特定行采取某些操作,唯一的办法是用他自己的try-catch来处理每条语句;三个例子。
2)如果我不需要根据引发异常的行采取特定的操作,那么堆栈跟踪将提供足够的信息来知道在没有每个指令的try-catch块的情况下行已经出错,这使得代码可读性较差。

回答

2

stacktrace将包含所有必要的信息。

如果您需要采取特定的操作,那么在每个taskX()方法中,您可能想抛出一个不同的异常,包装SQLException。虽然同样冗长。

+0

和喜欢让每个语句esotic解决方案在前面加一个“状态= 1;”,“状态= 2;”等等...当出现错误时,我将通过状态值了解正确执行的最后一行。我尝试这个非常有效,它唯一的缺点是手工制作的味道:-) – AgostinoX 2011-05-28 22:29:12

0

你可以保持一个计步器

int step = 0; 
try { 
    task1(); //may throw sql exception 
    step=1;//got through first 
    task2(); //may throw sql exception 
    step=2; 
    task3(); //may throw sql exception 
} catch (SQLException se) { 
    //from which line cames the exception? 
    if(step=0){ 
    //didn't get through first task 
    } 
    if(step=1){ 
    //didn't get through second task 
    } 
    if(step=2){ 
    //didn't get through third task 
    } 
} 
+1

看起来太hacky我:) – Bozho 2011-05-28 22:19:35

+0

这是太多的工作! StackTrace将显示从哪个类生成SQL异常,因此不需要保留单独的跟踪。 – CoolBeans 2011-05-28 22:24:23

+0

@bozho也许,但优雅的方式是非常详细的(多尝试捕捉)或需要关于源代码的运行时信息,并可能在重构或混淆期间中断(使用Throwable.getStackTrace()并匹配字符串或亚麻布) – 2011-05-28 22:24:34