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 de données sqlite dynamiquement


Sujet :

Android

  1. #1
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Avril 2004
    Messages : 249
    Points : 112
    Points
    112
    Par défaut Création d'une base de données sqlite dynamiquement
    Bonjour,

    A l'aide de quelques tutoriaux sur le net, je tente désespérément d'avancer dans mon dev.
    Pour commencer, je veux m'assurer que la base de données sur laquelle je suis censé travailler existe.
    Pour cela, j'utilise le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    public static final String DATABASE_PATH = "/data/data/com.engi.aquapalm/databases/";
    public static final String DATABASE_NAME = "aqua.db";
     
    private boolean DBExists()
    {
       SQLiteDatabase db = null;
       try
       {
          String databasePath = DATABASE_PATH + DATABASE_NAME;
          db = SQLiteDatabase.openDatabase(databasePath, null, SQLiteDatabase.OPEN_READWRITE);
          db.setLocale(Locale.getDefault());
          db.setLockingEnabled(true);
          db.setVersion(1);
       }
       catch (SQLiteException e)
       {
          Log.e("SqlHelper", "database not found");
       }
     
       if (db != null)
       {
          db.close();
       }
     
       return db != null ? true : false;
    }
    Si cette base n'existe pas, je la crée dynamiquement en partant d'une base de données connue stockée dans le dossier Assets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    try
    {
       String dbFilePath = DATABASE_PATH + DATABASE_NAME;
       OutputStream databaseOutputStream = new FileOutputStream(dbFilePath);
       InputStream databaseInputStream;
       databaseInputStream = myContext.getAssets().open(DATABASE_NAME);
       byte[] buffer = new byte[1024];
       int length;
       while ((length = databaseInputStream.read(buffer)) > 0)
       {
          databaseOutputStream.write(buffer);
       }
     
       //close the streams
       databaseInputStream.close();
       databaseOutputStream.flush();
       databaseOutputStream.close();
    }
    catch (FileNotFoundException e)
    {
       throw new Error("File not found.");
    }
    catch (IOException e)
    {
       throw new Error("Problem copying database from resource file.");
    }
    Le problème dans ce code est qu'il ne s'exécute jamais.
    Dès la 2ème ligne (OutputStream ...), une exception FileNotFound est déclenchée.
    Je ne comprends pas : à ce stade, on est censé créer le fichier, alors pourquoi j'ai ce type d'exception ?
    Voilà deux jours que je cherche à comprendre, mais ça dépasse mes compétences de piètre développeur android ...
    Toute aide sera la bienvenue.
    Merci d'avance...
    _____
    __
    _

    Engi

  2. #2
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,


    Constructs a new FileOutputStream that writes to file.
    Parameters
    file the file to which this stream writes.
    Throws
    FileNotFoundException if file cannot be opened for writing.
    http://developer.android.com/referen...ava.io.File%29

    Utilises plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public FileOutputStream (File file, boolean append)
    Since: API Level 1

    Constructs a new FileOutputStream that writes to file, creating it if necessary. If append is true and the file already exists, it will be appended to. Otherwise a new file will be created.
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  3. #3
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Avril 2004
    Messages : 249
    Points : 112
    Points
    112
    Par défaut
    Grâce à tes indications, je viens de me rendre compte d'une chose :
    en fait, quand j'explore les fichiers contenus dans l'émulateur, le dossier databases n'existe pas.
    C'est donc ça qui explique le problème.
    Par contre, maintenant, je ne comprends pas pourquoi il n'existe pas.
    Dans tous les tutoriels que j'ai parcourus, le code se réfère tout le temps à ce dossier sans jamais préciser s'il faut ou non en tester la présence, voire le créer si nécessaire.
    Est-ce un dossier standard qui devrait automatiquement exister ou bien est-ce à moi de le créer ?
    _____
    __
    _

    Engi

Discussions similaires

  1. création d'une base de donnée dynamique
    Par ferhat.adel dans le forum Langage
    Réponses: 15
    Dernier message: 09/05/2011, 19h16
  2. création d'une base de données
    Par cyrilng dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 18/05/2005, 14h38
  3. Réponses: 4
    Dernier message: 22/09/2004, 09h17
  4. Création d'une base de données contenant des images
    Par gandalf_le_blanc dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 16/06/2004, 15h29

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