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.

Réponses

  • C'est bien sûr possible si le fichier SQL est un fichier SQLite mais pas forcément efficace.

    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
  • Merci de ta réponse, je vais donc me tourner vers cette solution. Donc finalement je créer la BDD dans mon application, et à  chaque chargement je demande à  mon webservice si une mise à  jour est disponible. Par contre je ne vois pas trop comment je vais pouvoir détecter qu'il y une MAJ. Et du coup comment je doit procéder pour récupérer le fichier SQLite.
  • AliGatorAliGator Membre, Modérateur
    Si tu fais par système mise à  jour, il ne faut pas que ton WebService te retourne un fichier SQLite mais plutôt un fichier .sql (c'est à  dire un fichier texte contenant les instructions SQL genre "INSERT INTO xxx" etc. Le genre de fichier que l'on obtient quand on fait un dump ou un export de la base). Comme ça tu n'aura qu'à  demander ensuite à  exécuter ces instructions SQL sur ta base locale pour la mettre à  jour.



    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.
  • En résumé, j'ai un fichier sql sur mon serveur qui contient ma base de données. Une fois que mon application appel ce script je vérifie s'il n'y a pas eu de mise à  jour en comparant le fichier présent et la base de données. Puis je renvoie le fichier si je détecte une mise à  jour.



    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.
  • AliGatorAliGator Membre, Modérateur
    Bah oui pourquoi passer par du XML ou du JSON ? Le XML ou le JSON c'est tout à  fait adapté pour un WebService qui retourne des données structurées. Mais là  vu que tu n'as besoin que de renvoyer un fichier texte (.sql) pas besoin de JSON ou XML.



    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.
Connectez-vous ou Inscrivez-vous pour répondre.