2011-11-27 105 views
3

我試圖抓住一個「android.database.sqlite.SQLiteException:錯誤代碼5:數據庫被鎖定」異常帶:SQLiteException不被抓住

try { 
     db.insert("mytable", null, myvalues); 
    } catch(SQLiteException e) { 
     Log.d("My App", "caught"); 

     ... 
    } 

出於某種原因,我仍然得到錯誤,並且「抓到」不會顯示在LogCat中。我試圖捕捉一般的「例外」,但這仍然行不通。怎麼了?

UPDATE 我發現這個問題,這是很奇怪的:出於某種原因改變db.insert()來db.insertOrThrow()作爲goto10陳述神奇的一切問題。該錯誤是來自該行,但也許它不是拋出一個異常,只有崩潰或什麼?

+0

您確定從該行拋出異常嗎? –

回答

9

我不相信.insert會拋出異常。當它在內部捕獲異常時,您可能只是看到它正在編寫的日誌消息。如果您希望在插入失敗時引發異常,請改爲使用.insertOrThrow

+3

沒錯。如果有'.insert',如果有任何錯誤,該方法將返回'-1'。 –

0

試試這個

try { 

} catch(SQLiteException e) { 
    Log.e("My App",e.toString(), e); 
} 
0

如果catch塊未能捕捉到異常,那麼它不會被拋入特定的try塊內,或者您有錯誤的異常。事實上,如果你趕上Exception,它仍然不起作用,說它是前一個問題。

所以你需要找出異常處在哪裏。我會嘗試更改日誌記錄配置以使LogCat記錄完整的異常堆棧跟蹤。這應該告訴你它在哪裏拋出。如果你不能這樣做,那麼你需要使用一個調試器來找到它......或者通過瀏覽你的應用程序源代碼來找到異常記錄的位置。

(另一種可能性是,catch塊捕捉異常,但你有你的日誌CONFIGS成立放棄「調試」日誌事件。)

0

唯一的例外可能是拋出你的時候打開數據庫,而不是在插入新行時。