2015-01-16 65 views
2

我想知道如何避免try-catch語句。現在我有一個數據庫處理程序,並每次運行一個命令時,我不得不將其包圍在一個try塊,像這樣:Java - 如何避免使用try catch語句

try { 
    while(levelData.next()) { 
     if(levelData.getInt("level") == nextLevel) return levelData.getInt("exp"); 
    } 
} catch (SQLException e) { 
    e.printStackTrace(); 
} 

我可以使它所以實際功能拋出異常或東西嗎?而不是手動把所有這些嘗試的?它們大多隻是一個美學問題,因爲這些試塊看起來很醜。

+2

那麼,如果您遇到SQLException,您希望發生什麼? – immibis

+5

實際上,你不能重新拋出異常,但在某個時候,有人真的應該處理它(並且是的,Java有一個默認處理程序,但你應該自己洗衣服!)。 *「我可以做到這一點,所以實際的函數拋出異常或什麼?」* ...'公共無效someMethod()拋出SQLException' ....你可能想看看[教訓:例外](http: //docs.oracle.com/javase/tutorial/essential/exceptions/) – MadProgrammer

+1

請注意,爲什麼不使用WHERE子句? – immibis

回答

1

現在我有一個數據庫處理程序和我每次運行一個命令我 有將其包圍在一個try塊像這樣的時間..

我認爲其他答案未能解決上述問題。當我開始使用Java進行編程時,當我的程序填充了用於SQL查詢語句的try - catch塊時,我討厭它。

我的工作方式是使用DAO級別層來處理異常。例如,如果我的程序需要訪問一個用戶表,我創建一個UserDAO類。然後創建查詢,並在該DAO類中捕獲異常。每次發生異常時,我都會進行所需的日誌記錄並拋出一個自定義的Unchecked Exception,例如, DatabaseErrorException。未經檢查的異常與已檢查的異常(如SQLException)之間的主要區別在於,您不必強制使用catchthrow它,因此它不會將您的代碼填充到throws聲明中。

(是的,你可以使用拋出避免使用try - catch,但你必須反正什麼地方處理它,想想有throws的功能無處不在。)

然後我們可以有一個全球性的過濾器這是應用程序的最高級別,以捕獲在程序中傳播的所有這些異常。通常數據庫錯誤無法恢復,因此我們只需要向用戶顯示錯誤。

+0

謝謝!非常徹底的答案!這正是我需要做的 –

+0

@KyleJensen:歡迎您:)如果您有興趣瞭解有關異常處理的更多信息,我會推薦閱讀Clean Code http://www.amazon.com/Clean-Code-Handbook- Software-Craftsmanship/dp/0132350882,這是一本經典的書,討論各種有趣的實用話題(幸運的是,非常容易閱讀) –

1

您可以使用throws關鍵字拋出異常,而不是使用try - catch塊,但在某個時候需要處理異常。我發現最令人討厭的是多個catch語句,但是如果您使用JDK> = 1.7,則它們有一個可用的多捕獲選項。對於異常記錄,您可以使用log4j庫。

6

可以拋出一個異常,而不是:

public void myMethod() throws SQLException { 
    while(levelData.next()) { 
     if(levelData.getInt("level") == nextLevel) 
      return levelData.getInt("exp"); 
    } 
}