2013-07-02 4 views
0

J'ai écrit une application qui a enregistré des données et l'a enregistré via SQL dans un fichier .db. J'avais une méthode de copie de la mémoire interne vers la carte SD.Android fonctionne avec le fichier db de la carte SD

Maintenant j'ai écrit une deuxième application, qui doit fonctionner avec ce fichier .db particulier. Comme je pense, que les applications ne peuvent pas accéder à conditionner des fichiers à partir d'autres applications

(dans ce cas

/data/data/app1_package/databases/my_database.db 

) j'ai besoin d'une certaine manière de travailler avec mon DB sur la carte SD. Comment je fais ça? Puis-je utiliser ce chemin dans ma classe SQLiteHelper?

Devrais-je le copier de SD à mon colis, est-ce encore possible (droits d'accès, etc.)? Je suis un débutant dans les bases de données, un peu d'aide serait bien.

Répondre

0

oui placer le fichier DB dans votre actif dossier et obtenir ainsi:

 DB_PATH="/data/data/app1_package/databases/my_database.db" 

dans votre création:

  is = getAssets().open("Meaniningss.db"); 
      write(is); 

la méthode:

   public void write(InputStream is) { 
    try { 
     OutputStream out = new FileOutputStream(new File(DB_PATH)); 
     int read = 0; 
     byte[] bytes = new byte[1024]; 

     while ((read = is.read(bytes)) != -1) { 
      out.write(bytes, 0, read); 
     } 
     is.close(); 
     out.flush(); 
     out.close(); 
     System.err.println(out + "\n"); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+0

l'utilisateur a eu ma première application, et j'écris mon application indépendamment du fichier db. donc j'ai besoin d'un moyen d'obtenir le fichier db dans ma deuxième application après son sur l'appareil. la manière d'actifs semble fonctionner que j'obtiens le fichier db PENDANT que j'écris la deuxième application. Est-ce que je vois cela, n'est-ce pas – Tommy

1

Vous pouvez ouvrir tout chemin de fichier lisible en tant que base de données:

File dbFile = new File(Environment.getExternalStorageDirectory(), "myfile.db"); 
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbFile,null,null); 

Remarque: vérifiez si la carte SD est montée avant d'utiliser ce code.

+0

ok, j'ai eu 2 classes dans ma première application. SQLHelper (qui crée la base de données et l'enregistre sur SD) et SQLDatabase (qui exécute les instructions SQL). Puis-je supprimer la classe d'assistance et travailler avec le fichier db que j'ai créé comme vous l'avez dit? respectivement, ai-je besoin de la classe d'aide pour lire seulement les buts? – Tommy

+0

@Tommy 'SQLieHelper' ouvre la base de données et appelle les méthodes de création/mise à jour. Si vous pouvez les coder vous-même, alors oui, vous pouvez travailler sans 'SQLiteOpenHelper'. –

+0

pouvez-vous me donner un indice comment je fais cela? Je suis vraiment nouveau dans ce truc de DB – Tommy

Questions connexes