如何将 Android 手机上的 SQLite 数据库与服务器上的 MySQL 数据库同步?

Posted

技术标签:

【中文标题】如何将 Android 手机上的 SQLite 数据库与服务器上的 MySQL 数据库同步?【英文标题】:How to sync SQLite database on Android phone with MySQL database on server? 【发布时间】:2011-09-24 13:55:58 【问题描述】:

我正在开发一个安卓应用程序。我想用服务器上的 mysql 数据库更新本地 SQLite 数据库。我无法弄清楚最合适和最标准化的方式是什么?

【问题讨论】:

***.com/a/18074302/1318946 【参考方案1】:

创建一个网络服务(REST 可能是最好的)并序列化您的 SQLite/MySQL 数据并将其 PUT/POST/GET 到/从您的网络服务。如果您决定从 MySQL 切换到其他服务器端,这将为您提供一个很好的抽象层。

【讨论】:

能否请您详细介绍一下如何创建 Web 服务? 这是一个相当大的话题,更适合它自己的问题。您没有为服务器端提供任何语言或平台,所以我无话可说。 仅将更改的数据从 SQLite 更新到 MySQL 数据库的最佳方法是什么? @AndrewWhite:Java 前端,本地客户端使用 SQLite 数据库,Web 端使用 php 和 SQL。您能否将我链接到一些有关为这些要求创建 Web 服务的教程 @SagarDevanga 在原始帖子 4 年后发表评论请求答案的作者帮忙,这似乎是对评论系统的过度使用。随意提出关于 SO 或程序员交流的问题。【参考方案2】:

您可能需要查看fyrecloud.com/amsler 这是一个演示 android 应用程序的源代码,该应用程序在 Android 设备上的 MySQL 服务器和 SQLite db 之间实现 MySQL 复制。

阿姆斯勒有两个支柱:

    它使用 MySQL 客户端/服务器协议与 MySQL 服务器通信,以便连接到服务器以进行身份​​验证并在发生复制事件时接收它们。

    它使用 Antlr lex and parse 软件来对传入的复制事件进行 lex 和解析,然后将 MySQL 命令转换为等效的 SQLite 命令。

这非常适合单向复制。您可以通过 RESTful 类型的方法间接修改 MySQL 服务器来模拟双向复制,然后在 MySQL 发送新的复制事件时进行观察。

通过 REST 访问服务器非常简单。但是,为了支持序列化而修改现有的 MySQL 安装会带来很多麻烦,无法在此列举。 Amsler 利用了预先存在的复制服务。 REST 还依赖于一些轮询策略,以使本地设备保持最新。同样,这种方法存在许多问题。 Amsler 与服务器保持 TCP/IP 连接,从而启用服务器推送更新通知。

Amsler 最困难的部分是搞清楚词法分析/解析。 MySQL、SQLite 及其各个版本之间的语法有许多细微的差别。差异如此之多,以至于提供收缩包装翻译器是不切实际的,您必须自己修改语法。

尽管如此,好的、坏的或丑陋的,都在这里。看看,也许手套合适。

【讨论】:

【参考方案3】:

这可能会有所帮助:sync databases Mysql SQLite

真正的答案是,没有标准或内置的神奇方法可以将位于服务器上某处的 MySQL 数据库复制到设备上。您将必须实现 web 服务或以某种方式将服务器上的 MySQL db 转换为 android sqlite 实现并将该文件下载到应用程序的数据目录中(我不建议采用这种方法)。

【讨论】:

非常有趣的是,您链接的那个被标记为这个的副本。【参考方案4】:

聚会迟到了,但http://www.symmetricds.org/ 是一个很好的解决方案。

Java,也可以在 Android 上运行。

LGPL。

可以处理 10,000 个客户。

【讨论】:

嘿,尼尔,感谢几年前的这篇文章。有点模糊的问题,既然你在这个领域,还有其他什么,更新,更好,更强大,跨越建筑物......对于保持本地 android 与远程 sql 数据库同步/离线的压倒性问题,就像 AmazonRDS 说的那样? Realm.io 很棒,但它只与它自己的数据库概念“ROS”同步/离线 - 而不是普通的 sql 服务器。也许有什么想法?干杯!【参考方案5】:

没有标准的方法。根据您的需要,您可以例如在 REST 或 SOAP 协议或更多二进制数据交换中使用 Web 服务。

【讨论】:

我强烈建议不要进行二进制数据交换,因为它们非常脆弱(想到浮动数据类型和数据类型大小) 取决于您传输的数据。根据用例 esp,它可能是可取的。使用嵌入式设备时。但是是的..在正常用例中,您可能会首先查看 REST..

以上是关于如何将 Android 手机上的 SQLite 数据库与服务器上的 MySQL 数据库同步?的主要内容,如果未能解决你的问题,请参考以下文章

将 Android 应用上的 SQLite DB 与远程 MySQL DB 同步

如何找到并清除所有Android设备上的SQLite数据库文件呢?

Android SQLite 和数据库方案上的 ORM [关闭]

cordova-sqlite-ext 可以读取 sd 卡(Android)上的数据库吗?

Android数据库使用指南(上)

android如何查看手机中的db文件,查看sqlite数据库的表结构