我有一个本地sqlite数据库在Android应用程序运行在多个设备上与远程数据库同步。每次我提取数据显示在用户界面上,我从本地数据库获得数据,然后从远程数据库查询并将它们插入本地数据库,使用下面的代码:
database.replaceOrThrow(TABLE_NAME,null,values);
除了有人从一个设备删除外,这个运行正常。2当远程数据库中的行被删除时,我怎么知道我本地数据库中的哪一行需要被删除呢?
有两个选择我都不喜欢1)每当我从远程数据库读取数据时,清除本地数据2)将本地数据与远程数据进行比较,找出远程数据中缺少哪一行,然后从本地数据库中删除。
对于这种常见的情况有什么最好的做法吗?谢谢!
4条答案
按热度按时间kcrjzv8t1#
我会选择选项2。您可以很容易地计算本地数据库和远程数据库之间的增量。可以创建两个ArrayList,其中包含对记录的主键或其他键的投影,然后使用removeAll计算本地列表和远程列表之间的差异此时,您有一个记录的所有键的列表,这些记录不再存在于您的远程数据库中,因此可以从您的本地数据库中删除。
c9qzyr3d2#
也许你可以试试这个:
Modification
完成时的time
存储为Remote
数据库。Shared Preference
中存储您的表creation
和updation
的时间。remote_table_time > table_time
,并获取那些时间为greater than
表creation
时间的条目gpnt7bae3#
应用任何手动同步逻辑都将是复杂的,难以调试和维护的噩梦。您的问题似乎假设远程数据库是真实的来源,但如果您允许用户在“离线”时进行数据更改,那么您还需要将本地更改追溯同步到远程存储。
我建议你在sync adapter上做个小测验。
rqcrx0a64#
给谁曾经寻找这个问题。这是伟大的视频解释概念离线第一应用程序
https://youtu.be/jaZ2gLMGUsM