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

Android 如何将本地SQLite数据库与远程数据库同步以执行删除操作?,android,sqlite,sync,Android,Sqlite,Sync,我在android应用程序中有一个本地sqlite数据库,在多个设备上运行,以与远程数据库同步。每次我获取要在UI上显示的数据时,我都会从本地数据库获取数据,然后从远程数据库查询并将其插入本地数据库,使用以下代码: database.replaceOrThrow(TABLE_NAME,null,values); 这运行正常,但有人从一个设备中删除。删除远程数据库中的行时,如何知道需要删除本地数据库中的哪一行 有两种选择我都不喜欢: 1) 每当我从远程获取数据时,清除本地数

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

           database.replaceOrThrow(TABLE_NAME,null,values);
这运行正常,但有人从一个设备中删除。删除远程数据库中的行时,如何知道需要删除本地数据库中的哪一行

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


对于这种常见情况,是否有最佳实践?谢谢

也许你可以试试这个:

  • 存储
    时间
    完成
    修改
    的是您的
    遥控器
    Db

  • 共享首选项中
    存储表的时间
    创建
    更新
    。也相应地
    更新

  • 最后比较:
    remote\u table\u time>table\u time
    并获取时间
    大于您的表
    创建时间的条目


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

      应用任何手动同步逻辑都将非常复杂,难以调试,维护起来也将是一场噩梦。您的问题似乎假定远程数据库是事实的来源,但如果您允许用户在“脱机”时进行数据更改,则您还需要将本地更改追溯同步到远程存储


      我建议你去看看。

      这样我只能知道我的本地数据是否过期,但不能帮我删除本地记录。更重要的是,我正在使用RESTAPI添加/删除行,我想很难获得这样的信息。时间戳将不起作用,特别是在事务量很大的情况下。保证远程数据库服务器时钟和移动设备的同步也是不可能的,特别是在不同的时区。感谢您为此提供提示!这似乎是最好的方法,当然,如果您在主键上使用自动增量,这将不起作用。