2014-03-12 82 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

相關問題