106 votes

Emplacement de la base de données sqlite sur l'appareil

J'ai créé une base de données sqlite de manière programmatique avec la méthode d'extension par défaut. SQLiteOpenHelper et de remplacer onCreate() . De cette façon, la base de données est créée à la volée lorsque cela est nécessaire.

Je voudrais vérifier le contenu du fichier db sur ma machine OS X avec un navigateur sqlite. Je connais le nom du fichier db, mais je ne le trouve pas sur le périphérique. Je me suis connecté au périphérique via USB et j'ai cherché avec le finder et le terminal, mais je n'arrive pas à trouver le fichier db.

Quel est l'emplacement par défaut d'une base de données sqlite sur un appareil Android ?

0 votes

102voto

Shardul Points 10371

Vous pouvez trouver votre base de données créée, nommée <your-database-name>

sur

//data/data/<Your-Application-Package-Name>/databases/<your-database-name>

Sortez-le en utilisant l'explorateur de fichiers et renommez-le pour qu'il ait l'extension .db3 afin de l'utiliser dans SQLiteExplorer.

Utilisez l'explorateur de fichiers du DDMS pour naviguer dans le répertoire de l'émulateur.

1 votes

Lorsque j'essaie de le faire dans un émulateur, je peux accéder à /data. Mais quand j'essaye avec mon Galaxy Vibrant connecté, je ne peux pas accéder à /data. Le serveur adb s'exécute-t-il de manière différente dans ces deux cas ?

43 votes

Tu n'as pas accès au dossier /data sur un vrai téléphone. Il est codé 700 . Vous avez besoin des privilèges Root pour le voir.

16 votes

Au cas où vous voudriez obtenir le chemin à partir de l'application c'est context.getDatabasePath("<votre-nom-de-base-de-données>"). Ce qui renvoie en fait le chemin ci-dessus. Vous pouvez accéder à ce chemin en lecture-écriture mais uniquement depuis l'application qui a créé la base de données.

45voto

RRTW Points 1239

Pour cela, ce que j'ai fait est

File f=new File("/data/data/your.app.package/databases/your_db.db3");
FileInputStream fis=null;
FileOutputStream fos=null;

try
{
  fis=new FileInputStream(f);
  fos=new FileOutputStream("/mnt/sdcard/db_dump.db");
  while(true)
  {
    int i=fis.read();
    if(i!=-1)
    {fos.write(i);}
    else
    {break;}
  }
  fos.flush();
  Toast.makeText(this, "DB dump OK", Toast.LENGTH_LONG).show();
}
catch(Exception e)
{
  e.printStackTrace();
  Toast.makeText(this, "DB dump ERROR", Toast.LENGTH_LONG).show();
}
finally
{
  try
  {
    fos.close();
    fis.close();
  }
  catch(IOException ioe)
  {}
}

Et pour ce faire, votre application doit avoir la permission d'accéder à la carte SD, ajoutez le paramètre suivant à votre manifest.xml

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Ce n'est pas une méthode brillante, mais elle fonctionne.

0 votes

Joli. C'est ce que je cherchais. On pourrait aussi choisir de télécharger la base de données complète sur un serveur pour l'analyser de cette façon.

3 votes

Si cela ne fonctionne pas ...utilisez le nom de la base de données "/data/data/your.app.package/databases/your_db" Enlevez simplement l'extension ".db3".

2 votes

Cette solution fonctionne bien. Mais vous pouvez utiliser getDatabasePath(your_db_name) pour obtenir l'objet File et utiliser getAbsolutePath() pour obtenir le chemin exact au lieu de le construire. La méthode getDatabasePath est définie dans ContextWrapper.

32voto

Shoham Points 71

Le Contexte contient de nombreuses fonctions de chemin : Context.getXXXPath()
L'un d'eux est Android.content.Context.getDatabasePath(String dbname) qui renvoie le chemin absolu d'une base de données appelée dbname.

Context ctx = this; // for Activity, or Service. Otherwise simply get the context.
String dbname = "mydb.db";
Path dbpath = ctx.getDatabasePath(dbname);

Le chemin renvoyé, dans ce cas, serait quelque chose comme :

/data/data/com.me.myapp/databases/mydb.db

Notez que ce chemin est généré automatiquement si vous utilisez SQLiteOpenHelper pour ouvrir la base de données.

25voto

barmaley Points 7307

Si vous parlez d'un dispositif réel /data/data/<application-package-name> est inaccessible. Vous devez avoir les droits Root...

0 votes

Ce n'est pas tout à fait vrai. Ce n'est pas consultable sur mais le accessibilité des fichiers dépend de leurs bits de permission individuels.

0 votes

Mon téléphone est enraciné. Comment puis-je "parcourir" le dossier de données ?

0 votes

@SreecharanDesabattula, vous devez aller dans le shell adb et passer en super-utilisateur en utilisant la commande "su" pour parcourir le répertoire.

13voto

Ray Britton Points 1312

/data/data/packagename/databases/

c'est-à-dire

/data/data/com.example.program/databases/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X