我在Android应用程序中运行一个本地sqlite数据库,在多个设备上运行以与远程数据库同步。每当我获取要在UI上显示的数据时,我从本地数据库获取数据,然后从远程数据库查询并使用以下代码将它们插入本地数据库:
database.replaceOrThrow(TABLE_NAME,null,values);
除了有人从一台设备上删除外,这个运行正常。当删除远程数据库中的行时,如何知道本地数据库中的哪一行需要删除?
有两种选择我不喜欢: 1)每当我从远程获取时清除本地数据 2)将本地数据与远程数据进行比较,找出远程数据中缺少哪一行,然后从本地数据库中删除。
这种常见情况有没有最佳做法?谢谢!
答案 0 :(得分:0)
可能你可以尝试一下:
存储time
完成Modification
的是Remote
Db。
在Shared Preference
存储您的时间表creation
和updation
。还相应地update
。
最后比较:remote_table_time > table_time
并获取那些时间为greater than
表creation
时间的条目
答案 1 :(得分:0)
我选择了选项编号2.您可以轻松计算本地数据库和遥控器之间的增量。例如,您可以创建两个ArrayList,其中包含主键上的投影或记录的另一个键。然后使用removeAll(Collection)计算本地列表和远程列表之间的差异。此时,您有一个列表,其中包含远程数据库中不再存在的所有记录键,因此可以从本地数据库中删除。
答案 2 :(得分:0)
应用任何手动滚动的同步逻辑将是复杂的,难以调试和维护的噩梦。您的问题似乎假设远程数据库是事实的来源,但如果您允许用户在“离线”时进行数据更改,那么您还需要将本地更改同时回溯到远程存储。
我建议你对sync adapter进行一次小测验。