如何将Android手机上的SQLite数据库与服务器上的MySQL数据库同步?
我正在开发一个Android应用程序。 我想用服务器上的MySQL数据库更新本地的SQLite数据库。 我无法弄清楚什么是最合适和标准化的方式呢?
创build一个Web服务(REST可能是最好的),然后将你的SQLite / MySQL数据和PUT / POST / GET到/从你的web服务序列化。 如果你决定从MySQL切换到其他服务器端,这会给你一个很好的抽象层。
您可能需要查看fyrecloud.com/amsler这是一个演示Android应用程序的源代码,该应用程序在MySQL服务器和Android设备上的SQLite数据库之间实现MySQL复制。
阿姆斯勒依靠两大支柱:
-
它使用MySQL客户端/服务器协议与MySQL服务器进行通信,以便连接到服务器进行身份validation,并在发生复制事件时接收。
-
它使用Antlr lex和parsing软件来parsing和传入复制事件,然后将MySQL命令翻译成等效的SQLite命令。
这对于单向复制非常有用。 您可以通过RESTfultypes方法间接修改MySQL服务器来模拟双向复制,然后在MySQL发送新的复制事件时观察。
通过REST访问服务器非常简单。 但是,修改现有的MySQL安装以支持序列化在这里列举太多令人头疼的事情。 Amsler利用预先存在的复制服务。 REST也取决于一些轮询策略,以保持本地设备合理的最新。 再次,这种方法的许多问题。 Amsler维护与服务器的TCP / IP连接,使服务器推送通知更新。
阿姆斯勒最困难的部分就是搞清楚了解释/parsing。 MySQL,SQLite之间的语法和它们的各种版本有很多细微的差别。 如此多的差异,提供一个缩小包装转换器是不切实际的,而你必须求助于自己修改语法。
尽pipe如此,好的,坏的,或丑陋的,在这里。 看看,也许手套适合。
这可能会有所帮助: 同步数据库Mysql SQLite
真正的答案是,没有任何标准或build立在魔法的方式来复制某个服务器上某个地方的MySQL数据库到设备。 你将不得不实现一个web服务或以某种方式将服务器上的MySQL数据库转换为android的sqlite实现,并将该文件下载到您的应用程序的数据目录(而不是我build议采取的路线)。
没有标准的方法。 根据您的需要,您可以使用REST或SOAP协议中的Web服务或更多的二进制数据交换。