2016-04-24 97 views
0

當我使用Java,我經常看到這樣的代碼:檢查SQL錯誤/異常

try { 
    // any CRUD operation 
} catch(SQLException e) { 
    // do some specific database error stuff 
    // if we're in a transaction, we usually rollback 
    try { 
     // rollback the transaction 
    } catch(anotherException e) { 
     // do some specific rollback error stuff 
    } 
} 

我只遇到了SQL /數據庫錯誤時,有件事情很錯我的代碼。執行SQL操作並將嘗試捕獲到它們周圍似乎非常重複。

由於在服務器端驗證用戶輸入是一種很好的做法,除了在應用程序啓動時連接數據庫之外,還需要捕獲數據庫異常?

+0

編程是非常非常重複的。你應該也可以有一個finally塊。 – Paparazzi

回答

2

當訪問任何外部軟件系統,你應該檢查錯誤,這只是一個良好的做法。儘管「正常」操作可能不會產生錯誤,但由於其他原因,您可能會收到錯誤。例如:

  • 數據庫服務器斷開連接。
  • 數據庫/模式/表不再可用。
  • 該查詢生成超時。
  • 數據庫日誌已滿。

如果底層數據庫發生變化,您也可能會遇到錯誤。例如:

  • 列類型可能會更改。
  • 列名可能會更改。
  • 表名稱可能會更改。

問題是:要麼你正在編寫一次性代碼,要麼你正在編寫可持續代碼。如果是後者,那麼你應該檢查潛在的錯誤。 try/catch塊是負責編程和良好實踐的標誌。他們並不混亂。

+0

好點。如果在我的應用程序中發生這樣的錯誤,我應該爲此編寫一個單獨的錯誤頁面,因爲這些錯誤來自服務器,對不對? – morbidCode

+0

@morbidCode。 。 。可能是這樣的 - 你需要決定你如何處理錯誤。 –

1

更多回答你的問題從戈登答案。但太多的評論。

您對異常所做的操作取決於異常的級別。用戶並不在乎是否錯誤來自服務器或客戶端。他們所關心的只是它不起作用。

如果您可以正常處理它,然後以一致的方式給用戶一個警告消息。它可以在同一頁面上,另一個頁面彈出...可以繼續。超時是非關鍵性錯誤的一個例子。

如果這是致命錯誤,請以一致的方式再次向用戶發送致命錯誤消息,並關閉應用程序。通常告訴他們打電話給技術支持。正確的是,用戶不喜歡看到重要的錯誤消息,但是這比應用程序崩潰更好。

一個好的做法是將異常,內部異常,時間和用戶ID寫入數據庫,以便更好地處理它。東西將在測試和生產中突破。如果沒有良好的異常處理,追蹤和修復錯誤就更加困難。我認爲只要事先做好就不那麼容易了。如果這是一個丟棄工具,那麼另一件事。