如何将本地SQLite数据库与远程数据库同步以进行删除操作?

时间:2014-06-11 06:36:11

标签: android sqlite sync

我在Android应用程序中运行一个本地sqlite数据库,在多个设备上运行以与远程数据库同步。每当我获取要在UI上显示的数据时,我从本地数据库获取数据,然后从远程数据库查询并使用以下代码将它们插入本地数据库:

           database.replaceOrThrow(TABLE_NAME,null,values);

除了有人从一台设备上删除外,这个运行正常。当删除远程数据库中的行时,如何知道本地数据库中的哪一行需要删除?

有两种选择我不喜欢: 1)每当我从远程获取时清除本地数据 2)将本地数据与远程数据进行比较,找出远程数据中缺少哪一行,然后从本地数据库中删除。

这种常见情况有没有最佳做法?谢谢!

3 个答案:

答案 0 :(得分:0)

可能你可以尝试一下:

  • 存储time 完成Modification的是Remote Db。

  • Shared Preference存储您的时间表creationupdation。还相应地update

  • 最后比较:remote_table_time > table_time并获取那些时间为greater thancreation时间的条目

答案 1 :(得分:0)

我选择了选项编号2.您可以轻松计算本地数据库和遥控器之间的增量。例如,您可以创建两个ArrayList,其中包含主键上的投影或记录的另一个键。然后使用removeAll(Collection)计算本地列表和远程列表之间的差异。此时,您有一个列表,其中包含远程数据库中不再存在的所有记录键,因此可以从本地数据库中删除。

答案 2 :(得分:0)

应用任何手动滚动的同步逻辑将是复杂的,难以调试和维护的噩梦。您的问题似乎假设远程数据库是事实的来源,但如果您允许用户在“离线”时进行数据更改,那么您还需要将本地更改同时回溯到远程存储。

我建议你对sync adapter进行一次小测验。