2015-04-06 88 views
0

我已經有一個SQLite數據庫設置,我正在使用它作爲Android應用程序的緩存。該應用程序執行HTTP請求並獲取我可以插入到數據庫中的對象列表。第一個請求,如果我做了要求,怎麼辦所有以更好的方式如下:從SQLite數據庫插入,更新和刪除(Android)

1)插入從列表
2所有新對象)更新已經在數據庫中的所有對象
3)刪除最近對象列表中不存在的所有行。

我知道可以使用「INSERT OR UPDATE」查詢來完成選項1和2。我如何有效管理第三個選項?

現在我的方法是從表中刪除所有,然後插入所有。但這不是非常有效。任何想法如何改善?

回答

0

爲此,您可以使用行的ID。爲此,首先使用SELECT查詢來檢索想要刪除的所有行,並將其添加到臨時數組列表中,然後使用for循環通過數組列表以使用DELETE查詢刪除所有這些行。

0

您應該使用ContentProvider的applyBatch()方法(http://developer.android.com/reference/android/content/ContentProvider.html#applyBatch(java.util.ArrayList))來執行操作。

您可以異步地在單獨的線程中執行此方法,以便您不會阻塞其他任何內容。您將不得不創建一個ContentProviderOperations的列表。實際上,您只需指定需要在ArrayList中插入或更新的實例,並實現applyBatch()方法,以便它自動刪除數據庫中的其餘條目。

要回答關於如何刪除不在表中的條目的問題,邏輯假設是按順序搜索數據,然後刪除那些不需要存在的條目。

0

我猜想的目的是刷新保存在數據庫中的Http請求結果集。所以我認爲最有效的方法是進行事務或批處理操作,先刪除表中的所有行,然後插入新行。事務可能會更好,以便結果行不是全部都是新的或全部舊的,但不能混合使用。