Android 如何将本地SQLite数据库与远程数据库同步以执行删除操作?
我在android应用程序中有一个本地sqlite数据库,在多个设备上运行,以与远程数据库同步。每次我获取要在UI上显示的数据时,我都会从本地数据库获取数据,然后从远程数据库查询并将其插入本地数据库,使用以下代码:Android 如何将本地SQLite数据库与远程数据库同步以执行删除操作?,android,sqlite,sync,Android,Sqlite,Sync,我在android应用程序中有一个本地sqlite数据库,在多个设备上运行,以与远程数据库同步。每次我获取要在UI上显示的数据时,我都会从本地数据库获取数据,然后从远程数据库查询并将其插入本地数据库,使用以下代码: database.replaceOrThrow(TABLE_NAME,null,values); 这运行正常,但有人从一个设备中删除。删除远程数据库中的行时,如何知道需要删除本地数据库中的哪一行 有两种选择我都不喜欢: 1) 每当我从远程获取数据时,清除本地数
database.replaceOrThrow(TABLE_NAME,null,values);
这运行正常,但有人从一个设备中删除。删除远程数据库中的行时,如何知道需要删除本地数据库中的哪一行
有两种选择我都不喜欢:
1) 每当我从远程获取数据时,清除本地数据
2) 比较本地数据和远程数据,找出远程数据中缺少的行,然后从本地数据库中删除
对于这种常见情况,是否有最佳实践?谢谢 也许你可以试试这个:
- 存储
完成时间
的是您的修改
Db遥控器
- 在
存储表的时间共享首选项中
和创建
。也相应地更新
更新
- 最后比较:
并获取时间remote\u table\u time>table\u time
大于您的表
创建时间的条目
- 我会选择第二个选项。您可以轻松计算本地数据库和远程数据库之间的增量。例如,您可以创建两个ArrayList,其中包含在记录的主键或另一个键上的投影。然后使用removeAll(Collection)计算本地列表和远程列表之间的差异。此时,您有一个记录的所有键的列表,这些键不再存在于远程数据库中,因此可以从本地数据库中删除 应用任何手动同步逻辑都将非常复杂,难以调试,维护起来也将是一场噩梦。您的问题似乎假定远程数据库是事实的来源,但如果您允许用户在“脱机”时进行数据更改,则您还需要将本地更改追溯同步到远程存储
我建议你去看看。这样我只能知道我的本地数据是否过期,但不能帮我删除本地记录。更重要的是,我正在使用RESTAPI添加/删除行,我想很难获得这样的信息。时间戳将不起作用,特别是在事务量很大的情况下。保证远程数据库服务器时钟和移动设备的同步也是不可能的,特别是在不同的时区。感谢您为此提供提示!这似乎是最好的方法,当然,如果您在主键上使用自动增量,这将不起作用。