Android数据库与服务器同步

时间:2014-06-23 20:25:22

标签: android sql sqlite

我的应用程序的功能之一:

  • 从服务器数据库下载对象为JSON
  • 解析为MyObjects
  • 如果客户端数据库插入
  • 中不存在MyObject
  • 如果客户端数据库更新中存在MyObject
  • 从客户端数据库中删除所有不在JSON中的MyObjects

首先,我的方法是拥有独立的_id列(PRIMARY KEY)并将服务器ID存储在remote_id列中。但过了一段时间我放弃了这个想法有两个原因:

  • 拥有_id列但实际上大部分时间都使用remote_idCREATEUPDATEDELETE有点“难看” )并仅在查询中使用_id
  • 调试有点痛苦,有时令人困惑

因此,我最终删除了remote_id列,并将_id填入服务器端id

这很好,但现在我发现我必须添加一个功能来在本地添加,更新和删除MyObject。我主要担心的是,本地添加的_id可能会与远程_id值发生冲突。

我想出了两个解决方案:

  • 创建一个复合主键,其中包含_id列,其中包含自动增量,例如local列,其值为0或1

  • 创建另一个仅包含本地添加的MyObject实例

  • 的表

您认为哪个选项更好?或许你还有其他更好的想法?

1 个答案:

答案 0 :(得分:0)

您可以拥有本地更改的客户端临时表。客户端上线后 - 将所有内容从本地临时表放到远程表中,并使用服务器ID将临时表中的所有内容放到本地主表中。

通过这种方式,您始终可以找到用户在服务器端和本地端所做的差异。