J'ai créé une base de données sqlite par programme avec le moyen par défaut d'étendre SQLiteOpenHelper
et de remplacer onCreate()
. De cette façon, la base de données est créée à la volée si nécessaire.
J'aimerais vérifier le contenu du fichier de base de données sur ma machine OS X avec un navigateur sqlite. Je connais le nom du fichier de base de données, mais je ne le trouve pas sur le périphérique. Je me suis connecté à l'appareil via USB et j'ai cherché avec le Finder et le terminal, mais je ne trouve tout simplement pas le fichier db.
Quel est l'emplacement par défaut d'une base de données sqlite sur un périphérique Android?
Vous pouvez trouver votre base de données créée, nommée <your-database-name>
dans
//data/data/<Your-Application-Package-Name>/databases/<your-database-name>
Extrayez-le à l'aide de l'explorateur de fichiers et renommez-le pour qu'il porte l'extension .db3 afin de pouvoir l'utiliser dans SQLiteExplorer.
Utilisez l'explorateur de fichiers de DDMS pour accéder au répertoire de l'émulateur.
Pour cela, ce que j'ai fait c'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 l'autorisation d'accéder à la carte SD, ajoutez les paramètres suivants à votre fichier manifest.xml
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
Pas génial, mais ça marche.
Le contexte contient de nombreuses fonctions de chemin: Context.getXXXPath ()
L'un d'eux est Android.content.Context.getDatabasePath (String nombase) qui renvoie le chemin absolu d'une base de données appelée nombase.
Context ctx = this; // for Activity, or Service. Otherwise simply get the context.
String dbname = "mydb.db";
Path dbpath = ctx.getDatabasePath(dbname);
Le chemin retourné, 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.
Si vous parlez de périphérique réel, /data/data/<application-package-name>
est inaccessible. Vous devez avoir les droits root ...
C'est une vieille question, mais répondre peut aider les autres.
Le chemin par défaut où Android enregistre les bases de données ne peut pas être accédé sur des périphériques non rootés. Ainsi, le moyen le plus simple d'accéder au fichier de base de données (uniquement pour les environnements de débogage) consiste à modifier le constructeur de la classe:
public class MySQLiteOpenHelper extends SQLiteOpenHelper {
MySQLiteOpenHelper(Context context) {
super(context, "/mnt/sdcard/database_name.db", null, 0);
}
}
N'oubliez pas de changer pour les environnements de production avec ces lignes:
public class MySQLiteOpenHelper extends SQLiteOpenHelper {
MySQLiteOpenHelper(Context context) {
super(context, "database_name.db", null, 0);
}
}
/data/data/packagename/databases/
c'est à dire
/data/data/com.example.program/databases/
Une base de données SQLite n'est qu'un fichier. Vous pouvez utiliser ce fichier, le déplacer et même le copier sur un autre système (par exemple, de votre téléphone à votre poste de travail), et tout fonctionnera correctement. Android enregistre le fichier dans le répertoire /data/data/packagename/databases/
. Vous pouvez utiliser le adb command
ou le File Explorer view
dans Eclipse (Window > Show View > Other... > Android > File Explorer
) pour l'afficher, le déplacer ou le supprimer.
eh bien, cela pourrait être tard, mais cela aidera. Vous pouvez accéder à la base de données sans enracinant votre appareil via adb
démarrez adb en utilisant cmd et tapez les commandes suivantes
-run-as com.your.package
-Shell@Android:/data/data/com.your.package $ ls
cache
databases
lib
shared_prefs
Maintenant, vous pouvez ouvrir à partir d’ici.
Si vous nommez votre base de données sous forme de fichier sans indiquer de chemin, le moyen le plus courant d'obtenir son dossier est le suivant:
final File dbFile = new File(getFilesDir().getParent()+"/databases/"+DBAdapter.DATABASE_NAME);
où DBAdapter.DATABASE_NAME
est simplement un String
comme "mydatabase.db".Context.getFilesDir()
renvoie le chemin d'accès aux fichiers de l'application, tels que: /data/data/<your.app.packagename>/files/
c'est pourquoi vous devez .getParent()+"/databases/"
, supprimer les "fichiers" et ajouter des "bases de données".
BTW Eclipse vous avertira de la chaîne "data/data /" codée en dur mais pas dans ce cas.
By Default it stores to:
String DATABASE_PATH = "/data/data/" + PACKAGE_NAME + "/databases/" + DATABASE_NAME;
Where:
String DATABASE_NAME = "your_dbname";
String PACKAGE_NAME = "com.example.your_app_name";
Et vérifiez si votre base de données est stockée sur Stockage de périphériques. Si oui, vous devez utiliser une autorisation dans Manifest.xml:
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
Vous pouvez y accéder en utilisant adb Shell comment faire
Contenu du lien ci-dessus:
Didacticiel: Comment accéder à une base de données Android à l'aide d'une ligne de commande. Lorsque vous commencez à utiliser une base de données dans votre programme, il est vraiment important et utile de pouvoir y accéder directement, en dehors de votre programme, pour vérifier ce que le programme vient de faire et pour le déboguer.
Et c'est important aussi sur Android.
Voici comment faire cela:
1) Lancez l’émulateur (ou connectez votre appareil réel à votre PC). Pour ce faire, je lance généralement l'un de mes programmes à partir d'Eclipse. 2) Lancez une invite de commande dans le répertoire Android tools. 3) tapez adb Shell. Cela lancera un shell unix sur votre émulateur/périphérique connecté. 4) allez dans le répertoire où se trouve votre base de données: cd data/data vous avez ici la liste de toutes les applications de votre appareil Allez dans votre répertoire d’application (attention, Unix est sensible à la casse !!) cd com.alocaly.LetterGame et descendez dans votre répertoire de bases de données: cd database Vous trouverez ici toutes vos bases de données. Dans mon cas, il n'y en a qu'un (maintenant): SCORE_DB 5) Lancez sqlite sur la base de données que vous souhaitez vérifier/modifier: sqlite3 SCORE_DB À partir de là, vous pouvez vérifier quelles tables sont présentes: .tables 6) entrez les instructions SQL souhaitées : sélectionnez * parmi Score;
C'est assez simple, mais chaque fois que j'en ai besoin, je ne sais pas où le trouver.
Si votre application crée une base de données, cette base de données est enregistrée par défaut dans le répertoire DATA/data/APP_NAME/databases/FILENAME.
Les parties du répertoire ci-dessus sont construites en fonction des règles suivantes. DATA est le chemin d'accès renvoyé par la méthode Environment.getDataDirectory (). APP_NAME est le nom de votre application. FILENAME est le nom que vous spécifiez dans le code de votre application pour la base de données.
Définissez le nom de votre base de données comme suit:
private static final String DATABASE_NAME = "/mnt/sdcard/hri_database.db";
Et vous pouvez voir votre base de données dans:
storage/sdcard0/yourdatabasename.db
classe publique MySQLiteOpenHelper étend SQLiteOpenHelper {MySQLiteOpenHelper (contexte de contexte) {super (contexte, "/mnt/sdcard/database_nom.db", null, 0); }}
Ne codez pas "/ sdcard /"; utilisez plutôt Environment.getExternalStorageDirectory (). getPath ()
Vous pouvez également vérifier si votre IDE dispose d'un utilitaire similaire à la perspective DDMS d'Eclipse, qui vous permet de parcourir le répertoire et/ou de copier des fichiers depuis et vers l'émulateur ou un périphérique enraciné.