数据库更新

时间:2017-12-01 07:30:51

标签: android database sqlite synchronization

我无法理解如何在android上订阅数据库更新(SQLiteDatabase)?

目前有几个问题:

  • 从另一个进程更改(如果已更改,我们使用通常的观察者模式,那么在我们的流程中,更新将不会发生。
  • 从班级的另一个实例更改。问题就像在最后一段中一样。

我尝试使用FileObserver(订阅数据库文件的MODIFY事件),但它有问题:

  • 一次更改(尤其是插入)可能会产生多个MODIFY事件。
  • 事实上,他通知了数据库中的每个人的变化。在这种情况下,您需要在订阅者中挂起一些debounce或类似的内容。
  • 事件发生在对象中的数据库同步之前。也就是说,如果我们收到通知,则在数据库的副本中,数据无法更新(比赛状态)。

我尝试使用FileObserver包 - >更新对象数据库 - >邮寄给订阅者,但由于某些原因,在bd中数据仍然不相关。

使用ContentProvider请不要提供,因为暗示不仅可以在UI中获得更改。

所以,问题是:我可以以某种方式关注数据库的更新吗?

2 个答案:

答案 0 :(得分:1)

SQLite主要用于嵌入式/独立数据库,并不是典型客户端 - 服务器数据库的最佳解决方案,例如MySQL(等)按照: -

  

SQLite与客户端/服务器SQL数据库无法直接比较   自SQLite以来,MySQL,Oracle,PostgreSQL或SQL Server等引擎   正试图解决另一个问题。

     

客户端/服务器SQL数据库引擎努力实现共享   企业数据存储库。他们强调可扩展性,   并发,集中和控制。 SQLite努力提供   各个应用程序和设备的本地数据存储。 SQLite的   强调经济,效率,可靠性,独立性和   简单。

     

SQLite不会与客户端/服务器数据库竞争。 SQLite竞争   用fopen()。

摘自Appropriate Uses For SQLite

正如您所总结的那样,跨设备同步SQLite是有问题的,而基于服务器的解决方案将在很大程度上消除由于它被设计为数据的单一来源而实际提取的问题。

Google的Firebase可能是问题的解决方案,并且得到了相对较好的Android支持(单个SDK),并且可能比其他基于服务器的解决方案更容易实现,例如MySQL。

简而言之

的答案
  

我可以以某种方式关注数据库的更新吗?

是的,你可以,但与设计用于应对同步的解决方案相比,它不是“在公园散步”。

答案 1 :(得分:0)

我发现的一个解决方案是ContentProvider,它由Android从API 1支持。不幸的是,它不是完全异步的更好的解决方案,但在大多数情况下它都有效。