2016-09-26 64 views
0

例如,我有這樣的事情:如何在SQLite/Java/Android中正確處理這些錯誤?

public void saveFoodatas(List<Foodata> foodataList) { 
    DatabaseHelper.database.beginTransaction(); 
    try { 
     for (Foodata foodata : foodataList) { 
      saveFoodata(foodata); 
     } 
     DatabaseHelper.database.setTransactionSuccessful(); 
    } 
    finally { 
     DatabaseHelper.database.endTransaction(); 
    } 
} 

哪裏DatabaseHelper是延長SQLiteOpenHelperdatabase一類是SQLiteDatabase

在這個函數中,我試圖讓它保存/提交很多對象到數據庫,但是如果出現故障,那麼請不要提交任何更改。

我相信,它目前設置做正確(如果有錯誤,它離開try塊我覺得直去finally,因爲沒有catch),但我的問題是如何正確地觸發失敗情況。我需要saveFoodata「拋出異常」嗎?如果該函數在沒有進行任何try/catch/throwing的情況下遇到某種失敗,那麼這也算得上嗎?我如何處理saveFooData()

回答

0

我認爲你是在正確的軌道上。如果發生錯誤,您需要中止事務。您還需要提醒用戶該問題。這意味着saveFoodata()saveFoodatas()應該拋出一個異常,以便UI代碼可以向用戶顯示一條消息,

+0

這就是我想了解的。在我的代碼中,我沒有打算/預見/做任何事情,'saveFoodata'中發生錯誤有什麼區別?這些錯誤會停止應用程序嗎?如果我決定以某種方式解釋它們,我該如何中止交易/拋出異常? – user6872907

+0

@ user6872907如果saveFoodata()的任何方法調用拋出一個檢查的異常,那麼你將得到一個編譯錯誤。另一方面,如果任何拋出運行時異常,你的應用程序將崩潰。 –

+0

@ user6872907 try ... finally是錯誤發生時清理的正確方法。調用saveFoodatas()的任何方法都需要捕獲可能發生的任何異常。 –