Récupérer un fichier sql distant
Bonjour à tous, je viens vers vous car je développe en ce moment une nouvelle application. Celle-ci permettra de présenter les stages qui ont été attribués aux anciens étudiants de mon école d'Ingénieurs. Dans le but de permettre aux nouveaux étudiants de savoir dans quelles entreprises ils ont des chances d'être reçu (probabilité non prouvée).
A savoir, les informations dont j'ai besoins sont sur un serveur privé et j'ai accès à la base de données. Je pensais passer pas un webservice, j'aurai utilisé un script php que j'appellerais avec les paramètres que je veux. Mais j'ai discuté dernièrement avec un de mes camarades et il m'a dit qu'il était possible de récupérer un fichier sql distant pour l'avoir en local. Et ainsi faire des requêtes sql dessus comme on le fait en php (à un langage près).
J'aimerai donc savoir si cela est réellement possible, car ça m'éviterais de faire des requêtes à chaque changement de vue (assez lourd en terme de connexion par rapport à un fichier local). Bien évidemment je chargerais ce fichier au moment de la mise en mémoire de l'application dans l'appDelegate.
Je ne sais pas si cela est la bonne solution et c'est aussi pour cela que je vous demande cette information.
Merci de votre attention,
bien cordialement Walslayer.
A savoir, les informations dont j'ai besoins sont sur un serveur privé et j'ai accès à la base de données. Je pensais passer pas un webservice, j'aurai utilisé un script php que j'appellerais avec les paramètres que je veux. Mais j'ai discuté dernièrement avec un de mes camarades et il m'a dit qu'il était possible de récupérer un fichier sql distant pour l'avoir en local. Et ainsi faire des requêtes sql dessus comme on le fait en php (à un langage près).
J'aimerai donc savoir si cela est réellement possible, car ça m'éviterais de faire des requêtes à chaque changement de vue (assez lourd en terme de connexion par rapport à un fichier local). Bien évidemment je chargerais ce fichier au moment de la mise en mémoire de l'application dans l'appDelegate.
Je ne sais pas si cela est la bonne solution et c'est aussi pour cela que je vous demande cette information.
Merci de votre attention,
bien cordialement Walslayer.
Mots clés:
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Il faut penser aux mises à jour. Si le fichier est simplement dupliqué, il faudra le recharger complètement à chaque modification sur le serveur (ou bien créer une nouvelle version de l'application, ce qui ne va pas plaire à Apple).
La technique que j'utilise est de définir un WebService qui n'envoie que les évolutions du fichier :
- c'est beaucoup plus rapide au téléchargement
- cela peut être fait fréquemment, et l'application sur le mobile est toujours à jour
- la base complète est sur le mobile, l'application est réactive
Concernant le WebService il faudra bien sur que ton appli iPhone lui envoi la date de sa dernière mise à jour (car chaque iPhone sur lequel tournera ton appli ne mettra pas forcément la base à jour en même temps que les autres) et que donc ton WebService soit capable de générer le fichier .sql à renvoyer contenant les modifications entre cette date de dernière mise à jour et aujourd'hui.
Par contre je ne vois pas comment envoyer le fichier sql. Je doit passer par du XML, du JSON ? Je suis dans le flou à ce sujet. Car je sais récupérer un simple flux JSON ou XML. Mais un fichier sql.
Ce que je pense, c'est récupérer le flux retourné (sous forme de chaine de caractères) et créer un fichier dans mon application au format sql avec le contenu de mon flux. Et ensuite remplir ma BDD locale avec ce fichier. Sinon je vous avoue que je ne vois pas trop la méthode à utiliser.
Bon ceci dit, à la limite tu pourrais renvoyer un JSON représentant un dictionnaire contenant une clé "date" par exemple qui indiquerait la date à laquelle le contenu SQL a été généré par le serveur, ou bien une clé "version" contenant un numéro de version incrémental de ta base (à la limite c'est sans doute aussi simple), et une clé "sql" qui contiendrait l'export/dump de ta base (donc le texte avec les INSERT & co), et une clé "error" si jamais il y a eu une erreur (par exemple que tu as demandé la version 50 de ta base alors qu'on en est qu'à la version 10, ou bien si le serveur SQL est en maintenance et ne peux pas répondre pour l'instant...)
Mais bon in fine l'export de ta base SQL ça restera du texte, qu'il soit retourné en brut par le WebService ou qu'il soit encapsulé dans du JSON.