2014-03-12 28 views
0

假设我有以下几行代码,发生SQLException时,如何调用自定义异常?

 Class.forName(JDBC_DRIVER); 
     dbConnection = DriverManager.getConnection(DB_URL, USER, PASS); 

现在我想的是,当一个SQLException被抓住了,我想从SQLException中的捕获场把我的自定义异常,我的意思是有可能这样做还是有其他方法可以做到吗?

和我的自定义异常是ErrorToDisplayException为:

public class ErrorToDisplayException extends Exception{ 

public ErrorToDisplayException(Throwable e) { 
} 
    } 

我的代码是:

try {   
    //Register JDBC driver 
     Class.forName(JDBC_DRIVER); 
     dbConnection = DriverManager.getConnection(DB_URL, USER, PASS); 
    }catch(final SQLException se){ 
    // Handle errors for JDBC 
     throw new ErrorToDisplayException(se); 
    } 

现在发生的事情是,当编译器到达 }赶上(最终的SQLException SE){ 它不会去它的捕捉身体,只是脱离,不知道为什么?

+0

是的,我已经这样做了,但什么情况是,当一个SQLException发生(在调试模式),它捕获的异常,并径直突破远离代码而不是执行它的catch字段!,不知道它为什么发生! – Amir

+0

这是一种奇怪的行为。你可以用你观察过的代码片段来编辑你的原始文章吗?也许这是一些未经检查的异常会发生什么滑出你的catch() –

+0

是的我已编辑! – Amir

回答

1

你的意思是这样的东西,或者我不明白它?!

try { 
    Class.forName(JDBC_DRIVER); 
    dbConnection = DriverManager.getConnection(DB_URL, USER, PASS); 
} catch (SQLException e) { 
    throw new MyException(e); 
} 

或者你的意思是在所有地方用自己的类型替换一些标准异常?

+0

是的,我在开始的时候做了同样的事情,但是我面临的问题是,当编译器进入时,catch(SQLException e){“, 那么它不会去它的领域,刚刚离开,不知道为什么! – Amir

+0

那么也许你根本就没有任何异常。你确定SQLException真的出现在上面提到的代码块中吗? – Anver

+0

请现在看我编辑的代码,希望你现在有一个想法! – Amir

0

第一:

class MyCustomException extends Exception { 
    public MyCustomException(Throwable e) { 
    } 
} 

然后:

try { 
    Class.forName(JDBC_DRIVER); 
    dbConnection = DriverManager.getConnection(DB_URL, USER, PASS); 
} catch (SQLException e) { 
    throw new MyCustomException(e); 
} 
+0

是的,我完全用这种方式,但编译器不会进入SQLException的捕获字段! – Amir

相关问题