web-dev-qa-db-fra.com

Comment synchroniser la base de données SQLite sur Android avec la base de données MySQL sur le serveur?

Je développe une Android. Je veux mettre à jour la base de données SQLite locale avec la base de données MySQL sur le serveur. Je ne suis pas en mesure de comprendre que quelle est la manière la plus appropriée et la plus standardisée de le faire?

29
Harshit Agarwal

Créez un service Web (REST est probablement le meilleur) et sérialisez vos données SQLite/MySQL et PUT/POST/GET vers/depuis votre service Web. Cela vous donnera une belle couche d'abstraction au cas où vous décideriez de passer de MySQL à autre chose côté serveur.

14
Andrew White

Vous voudrez peut-être jeter un œil à fyrecloud.com/amsler Il s'agit du code source d'une application de démonstration Android qui implémente la réplication MySQL entre un serveur MySQL et la base de données SQLite sur un Android périphérique.

Amsler repose sur deux piliers:

  1. Il communique avec le serveur MySQL en utilisant le protocole client/serveur MySQL afin de se connecter au serveur pour l'authentification et pour recevoir les événements de réplication à mesure qu'ils se produisent.

  2. Il utilise Antlr Lex et analyse le logiciel afin de Lex et d'analyser les événements de réplication entrants, puis de traduire les commandes MySQL en commandes SQLite équivalentes.

C'est idéal pour la réplication unidirectionnelle. Vous pouvez simuler la réplication bidirectionnelle en modifiant indirectement le serveur MySQL via des méthodes de type RESTful, puis en regardant pendant que MySQL renvoie un nouvel événement de réplication.

Accéder à un serveur via REST est assez simple. Cependant, la modification d'une installation MySQL existante afin de prendre en charge la sérialisation présente trop de maux de tête à énumérer ici. Amsler tire parti des services de réplication préexistants. REST dépend également d'une stratégie d'interrogation afin de maintenir le périphérique local raisonnablement à jour. Encore une fois, de nombreux problèmes avec cette approche. Amsler maintient une connexion TCP/IP au serveur qui permet la notification push-server des mises à jour.

La partie la plus difficile d'Amsler est de déterminer le lexing/l'analyse. La syntaxe entre MySQL, SQLite et les différentes versions du même ont de nombreuses différences subtiles. Il y a tellement de différences qu'il est impossible de fournir un traducteur sous film rétractable et à la place, vous devez recourir à la modification de la grammaire vous-même.

Néanmoins, bon, mauvais ou laid, le voici. Jetez un oeil et peut-être que le gant convient.

5
Fyreman

Cela va probablement être utile: synchroniser les bases de données Mysql SQLite

La vraie réponse est qu'il n'y a pas de norme ou de manière magique pour copier simplement une base de données MySQL qui vit sur un serveur quelque part vers un appareil. Vous devrez implémenter un service Web ou convertir la base de données MySQL du serveur en Android sqlite et télécharger ce fichier dans le répertoire de données de votre application (pas un itinéraire que je recommanderais de prendre)) .

2
QRohlf

Tard dans la soirée, mais http://www.symmetricds.org/ est une bonne solution.

Java, fonctionne sur Android aussi.

LGPL.

Peut gérer 10 000 clients.

2
Neil McGuigan

Il n'y a pas de moyen standard. Selon vos besoins, vous pouvez par exemple utilisez les services Web dans les protocoles REST ou SOAP ou plus d'échange de données binaires).

0
Manfred Moser