我在Android中有一個SQLite數據庫,並且我使用ContentProvider
來處理這些操作,這些操作被持久保存到列中具有UNIQUE限定符的表中。可以依賴SQLiteConstraint並讓SQLite檢查我嗎?有沒有抓住?
問題:
然而,當我insert
重複值到數據庫中,它不會破壞我的代碼本身,但它仍然吐出的SQLiteConstraintException
日誌行千千,我的用戶是隻是感覺像污染日誌,一些未完成的東西。我試圖捕捉異常來試驗,但它仍然記錄下來。
問:
那麼,我該怎麼辦沉默那些日誌行?這甚至有可能嗎?
請閱讀下面的評論以提出問題的原因。
錯誤:
時間列具有UNIQUE
約束:
Error inserting Factor=2.0 Time=1325375465000 Extra=none
android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
at android.database.sqlite.SQLiteStatement.native_execute(Native Method)
at android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:55)
at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1549)
at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1410)
at mypackage.myapp.provider.DataProvider.bulkInsert(DataProvider.java:353)
at android.content.ContentProvider$Transport.bulkInsert(ContentProvider.java:179)
at android.content.ContentResolver.bulkInsert(ContentResolver.java:646)
at mypackage.myapp.service.MyService.onHandleIntent(MyService.java:96)
at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:59)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.os.HandlerThread.run(HandlerThread.java:60)
我感覺,這一切意味着什麼,我試圖做的是從一個獨特的約束重複插入恢復偷懶的辦法,因此「糙米」感覺在日誌中。我可能會更好地解決創建重複條目(並調用插入)的任何內容。我都很順利。 但這引發了一個問題(對我來說):爲什麼我們不能安全地將工作「卸載」到約束檢查器並讓它無法默認日誌?以防萬一我們想...也許我們期望重複...所以沒什麼可擔心的。也許我們的數據源,在我們的控制之外是有缺陷的... – davidcesarino 2011-12-31 21:36:14
評論後回答:正如我所說,爲了這個問題,我是懶惰的目的,因爲我試圖不編碼檢查和讓SQLite關心1)安全性(併發性),2)效率(sqlite比我更好/更快?),3)實際上(更少的代碼)。然而,有些東西引起了我的注意(插入行數),所以我實現了dups檢查自己,除了約束。無論如何,我最終對我的關於(1)的代碼非常滿意。請記住,當閱讀這個問題。 – davidcesarino 2012-01-02 18:55:10
如果你自己沒有使用android.util.Log,那麼你爲什麼會關心向用戶記錄錯誤? – 2014-01-24 15:16:57