IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Création d'une base SQLite depuis un fichier xml


Sujet :

Android

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Japon

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Création d'une base SQLite depuis un fichier xml
    Bonjour,

    C'est la première fois que je poste un message, si la forme n'est pas parfaite je m'en excuse.

    J'ai créé un dictionnaire de coréen pour Android. Actuellement, plus de 1000 personnes l'utilisent.
    https://play.google.com/store/apps/d...iko.coreen.app

    L'ensemble des mots du dictionnaire sont présents dans un fichier XML. Lors de la première utilisation de l'application j'importe tous ces mots dans une base SQLite. Tous marche sans problème, mais plus j'ajoute de mots plus l'importation prend du temps (environ 3 secondes sur un Galaxy SII). J'aimerais afficher un petit message pendant l'importation des mots dans la base de données.
    J'ai essayé de faire l'importation dans un AsyncTask, mais si j’exécute l'importation dans un fil d’exécution autre que le principal l'importation prend 2 minutes au lieu de 3 secondes. J'ai essayé de changer la priorité du thread mais rien n'a changé.

    Si j'essaye d'afficher un Dialog ou une Alert avant de commencer l'importation, elles ne s'affichent que une fois que tout est fini.

    Je suis sur qu'il a une solution vraiment simple, mais je ne l'ai pas trouvé.
    Je voudrais afficher un message "importation des mots" pendant que les mots sont importés dans la base.

    Pour résumer, ma question est la suivante : Comment importer un gros fichier XML dans une base SQLite ?


    J'attends vos conseils.

  2. #2
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Au vu des chiffres annoncés sur ton application, les temps me paraissent gros.

    Comment fais-tu tes mises à jours ? Tes enregistrements ? Comment est composé ton XML ? Comment le parses-tu ? Quel parseur utilises-tu ?
    Pourquoi ne passes-tu pas par des dump de base de données ? Il te suffirait dans ce cas de ne diffuser à la MaJ qu'un fichier de dump différentiel (avec les soucis d'utilisateurs passant d'une version N-2 à N).
    Tu pourrais aussi simplement faire table rase de la BDD locale et ne charger que le dump (solution possible si les utilisateurs n'ont aucun impact sur la BDD (pas de sauvegarde de mots/phrase, d'occurences, de compte...)).

    Pour que ce ne soit pas bloquant, il faut bien passer par une tâche autre comme tu as commencé à le faire (AsyncTask ou Thread). Que ton Dialog ne s'affiche que très rapidement en fin de traitement est normal si tu réalises des opérations bloquantes pour le thread graphique.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Japon

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci pour votre réponse.

    Comment fais-tu tes mises à jour ?
    Pour faire les mises à jour, je change le fichier XML contenant les mots et j'incrémente le numéro de la base de données. Quand un utilisateur fait la mise à jour (via Google Play), toute l'ancienne base de données est supprimée, puis je recrée la base avec le nouveau fichier XML.

    Tes enregistrements ?
    Pour faire l'insertion j'utilise un requête « INSERT INTO » pour chaque mot.

    Comment est composé ton XML ?
    Je mets un exemple ci-dessous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <mot>
    <hang>네</hang><rom>ne</rom><trad>oui</trad><type>adverbe</type></mot>
    <mot>
    Comment le parses-tu ?
    J'utilise une sous-classe de « org.xml.sax.helpers.DefaultHandler » qui lit le fichier XML.

    Quel parseur utilises-tu ?
    Un parseur SAX.

    Pourquoi ne passes-tu pas par des dump de base de données ?
    Je voulais aussi mettre le fichier de la base de données générée directement dans le fichier apk, mais je n'ai pas trouvé de bonne solution pour le faire.
    Il faut aussi penser aux nouveaux utilisateurs qui de toutes façons doivent charger tous les mots du dictionnaire en une fois.

    Tu pourrais aussi simplement faire table rase de la BDD locale et ne charger que le dump.
    Les utilisateurs ne font aucun enregistrement dans la base de données, je pense garder une liste des mots recherchés dans une future version, mais je ne suis pas obligé d'utiliser une base de données pour ça. J'utilise la base de données principalement pour pouvoir faire des recherches simplement et rapidement.

    Mais, s'il y a une autre solution plus pratique, je serais heureux de la connaitre.

    J'espère que j'ai bien répondue à toutes vos questions.

  4. #4
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Citation Envoyé par aruno14
    tes mises à jour ?
    Pour faire les mises à jour, je change le fichier XML contenant les mots et j'incrémente le numéro de la base de données. Quand un utilisateur fait la mise à jour (via Google Play), toute l'ancienne base de données est supprimée, puis je recrée la base avec le nouveau fichier XML.
    Ok. Pas grand chose à changer de ce côté-là je pense.

    Citation Envoyé par aruno14
    Tes enregistrements ?
    Pour faire l'insertion j'utilise un requête « INSERT INTO » pour chaque mot.
    Hum... Comment réalises-tu tes INSERT ?
    Fais-tu une ouverture et fermeture par INSERT ? Fais-tu plusieurs INSERT par commit ?
    Ou est-ce que tu fais une ouverture de base en début, la fermeture en fin et des INSERT par lot à chaque commit ?

    Citation Envoyé par aruno14
    Comment est composé ton XML ?
    Je mets un exemple ci-dessous.

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <mot>
    <hang></hang><rom>ne</rom><trad>oui</trad><type>adverbe</type></mot>
    <mot>
    Ok. Rien de particulier à dire.

    Citation Envoyé par aruno14
    Comment le parses-tu ?
    J'utilise une sous-classe de « org.xml.sax.helpers.DefaultHandler » qui lit le fichier XML.

    Quel parseur utilises-tu ?
    Un parseur SAX.
    Ok. Rien de particulier à dire.

    Citation Envoyé par aruno14
    Pourquoi ne passes-tu pas par des dump de base de données ?
    Je voulais aussi mettre le fichier de la base de données générée directement dans le fichier apk, mais je n'ai pas trouvé de bonne solution pour le faire.
    Il faut aussi penser aux nouveaux utilisateurs qui de toutes façons doivent charger tous les mots du dictionnaire en une fois.
    Justement. Vu que tu supprimes la BDD à chaque MaJ pour la recréer, les nouveaux utilisateurs ne sont pas différent des anciens
    Le fichier XML et son parsing me semble une étape intermédiaire supprimable.
    Je partirai sur un export de la base et l'importerai à la création de la base. Il y a divers exemples sur internet.
    Par contre, pour avoir assez peu joué avec des bases de données (applications orientées WS) et ayant juste le temps de répondre, je ne peux t'en fournir qui pourrait correspondre à ton besoin. Mes excuses.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Japon

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    J'ai essayé de copier le fichier de la base de donnée, je pense avoir réussi, mais le fichier n'est pas reconnue comme un fichier de base de donne après avoir été copié. C'est surement la solution la plus efficace, mais elle est aussi dangereuse si le fichier est corrompue ou si il y a un changement de version l'application peut devenir inutilisable.

    Je pense plutôt améliorer l'insertion des données du fichier XML, en suivant les instructions du site ci-dessous.
    http://www.geeek.org/android-5-astuc...qlite-659.html

    Merci pour tous vos conseils.

Discussions similaires

  1. [Débutant] comment accéder à une base sqlite depuis une application windows mobile
    Par binother dans le forum Windows Mobile
    Réponses: 0
    Dernier message: 28/12/2012, 11h31
  2. Réponses: 0
    Dernier message: 15/07/2009, 16h23
  3. [MySQL] Création d'une table à partir d'un fichier XML
    Par car0line dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 06/05/2009, 11h19
  4. Mise a jour d'une Base Access depuis fichier CSV sous IDE DEplphi
    Par LE MAHJONG dans le forum Bases de données
    Réponses: 1
    Dernier message: 18/10/2008, 19h42
  5. Réponses: 4
    Dernier message: 17/01/2007, 09h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo