Comment puis-je consulter la base de données SQLite sur un appareil Android? [dupliquer]
cette question a déjà une réponse ici:
- Débogage de base de données sqlite sur l'appareil 15 réponses
j'ai un ensemble de données dans une base de données SQLite. J'ai besoin d'afficher la base de données sur un périphérique. Comment dois-je faire?
j'ai vérifié en mode ddms. Les données dans explorateur de fichier est vide.
20 réponses
Voici des instructions étape par étape (tirées principalement d'une combinaison des autres réponses). Cela fonctionne même sur des appareils qui ne sont pas ancrés.
-
Connectez votre appareil et lancez l'application en mode de débogage.
-
vous pouvez utiliser
adb -d shell "run-as com.yourpackge.name ls /data/data/com.yourpackge.name/databases/"
pour voir ce qu'est le nom de fichier de la base de données.
Avis: com.yourpackge.name
est le nom de votre dossier de candidature. Vous pouvez l'obtenir à partir du Manifeste.
-
Copiez le fichier de la base de données de votre dossier d'application sur votre carte SD.
adb -d shell "run-as com.yourpackge.name cat /data/data/com.yourpackge.name/databases/filename.sqlite > /sdcard/filename.sqlite"
Notice: nom du fichier.sqlite est le nom de votre base de données que vous avez utilisé lorsque vous avez créé la base de données
-
Extraire les fichiers de base de données à votre machine:
adb pull /sdcard/filename.sqlite
cela copiera la base de données à partir de la carte SD à l'endroit où votre CDA existe.
-
Install Firefox SQLite Manager: https://addons.mozilla.org/en-US/firefox/addon/sqlite-manager/
-
ouvrir Firefox SQLite Manager (Tools->SQLite Manager) et ouvrir votre fichier de base de données à partir de l'étape 3 surtout.
-
Profitez-en!
tiré de ici , vous pouvez essayer:
- Facebook open source Stetho library
Dans la construction.gradle:
dependencies {
// Stetho core
compile 'com.facebook.stetho:stetho:1.5.0'
//If you want to add a network helper
compile 'com.facebook.stetho:stetho-okhttp:1.5.0'
}
initialiser la bibliothèque dans l'objet application:
Stetho.initializeWithDefaults(this);
et vous pouvez voir votre base de données en Chrome de chrome://inspect
- une autre option est ce plugin (non gratuit)
- et la dernière est cette bibliothèque libre/open source pour voir le contenu de la base de données dans le navigateur https://github.com/amitshekhariitbhu/Android-Debug-Database
la meilleure façon de visualiser et de gérer la base de données de votre application Android est d'utiliser la bibliothèque DatabaseManager_For_Android .
c'est un seul fichier D'activité Java; il suffit de l'ajouter à votre dossier source. Vous pouvez voir les tableaux dans votre base de données app, mettre à jour, supprimer, insérer des lignes à votre table. Tout à partir de l'intérieur de votre application.
lorsque le développement est fait, supprimez le fichier Java de votre dossier src. C'est tout.
vous pouvez visualiser la démo de 5 minutes, Gestionnaire de base de données pour la base de données SQLite Android .
le meilleur moyen que j'ai trouvé jusqu'à présent est d'utiliser L'outil de base de données Android-Debug.
son incroyablement simple d'utilisation et de configuration, il suffit d'ajouter la dépendance et de se connecter à l'interface de la base de données de l'appareil via le web. Pas besoin de root le téléphone ou d'ajouter des activités ou quoi que ce soit. Voici les étapes:
étape 1
ajoutez la dépendance suivante au fichier Gradle de votre application et lancez l'application.
debugCompile 'com.amitshekhar.android:debug-db:1.0.0'
étape 2
ouvrez votre navigateur et visitez L'adresse IP de votre téléphone sur le port 8080. L'URL doit ressembler à: http://YOUR_PHONE_IP_ADDRESS:8080
. Vous recevrez ce qui suit:
NOTE: Vous pouvez aussi toujours obtenir L'URL de l'adresse de débogage de votre code en appelant la méthode DebugDB.getAddressLog();
pour obtenir L'adresse IP de mon téléphone actuellement, on utilise des outils de Ping, mais il y a beaucoup d'alternatives.
étape 3
C'est ça!
plus de détails dans la documentation officielle: https://github.com/amitshekhariitbhu/Android-Debug-Database
si vous utilisez un appareil réel, et qu'il n'est pas enraciné, alors il n'est pas possible de voir votre base de données dans FileExplorer
, parce que, pour des raisons de sécurité, ce dossier est verrouillé dans le système Android. Et si vous l'utilisez dans un émulateur, vous le trouverez dans FileExplorer
, /data/data/votre nom de paquet/bases de données/yourdatabse.db .
Vous pouvez faire ceci:
-
adb shell
-
cd /go/to/databases
-
sqlite3 database.db
- Dans le
sqlite>
invite de commandes, tapez.tables
. Cela vous donnera toutes les tables dans la base de données.le fichier db. -
select * from table1;
Try AndroidDBvieweR !
- pas besoin d'enraciner votre dispositif
- pas besoin d'importer le fichier de base de données de la demande
- peu de configurations et vous êtes bon à aller!
Si vous ne voulez pas utiliser
- bad
- bibliothèque de tiers ou
- Grad-dependency etc
et juste vouloir le fichier de base de données dans votre SDCard , c'est la solution.
copier la classe DatabaseUtil.Java dans votre projet
package com.util;
import android.content.Context;
import android.os.Environment;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.channels.FileChannel;
/**
* Shayan Rais (http://shanraisshan.com)
* created on 8/17/2016
*/
public class DatabaseUtil {
//You need to declare permission
// <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
//in your Manifest file in order to use this class
//______________________________________________________________________________________________
//todo -> rename the database according to your application
final static String DATABASE_NAME = "MyDatabase.sqlite";
//example WhatsApp : /data/data/com.whatsapp/databases/msgstore.db
final static String FOLDER_EXTERNAL_DIRECTORY = Environment.getExternalStorageDirectory() + "/shanraisshan";
//______________________________________________________________________________________________
public static void copyDatabaseToExtStg(Context ctx) {
//external storage file
File externalDirectory = new File(FOLDER_EXTERNAL_DIRECTORY);
if(!externalDirectory.exists())
.
.
et simplement appeler copyDatabaseToExtStg () méthode de toute activité dans votre application
cela copiera le dossier de la base de données à l'emplacement sdcard / shanraisshan/your_database_file
pour d'autres explication détaillée cochez Android-Database-Viewer sur Github. https://github.com/shanraisshan/Android-Database-Viewer
j'ai utilisé navigateur de base de données SQLite pour voir le contenu SQLite DB dans le développement Android. Vous devez tirer le fichier de base de données de l'appareil d'abord, puis l'ouvrir dans SQLite DB Browser.
bien que cela ne visualise pas la base de données directement sur votre appareil, j'ai publié un simple script shell pour décharger les bases de données sur votre machine locale:
il exécute deux méthodes distinctes décrites ici:
- tout D'abord, il tente de rendre le fichier accessible pour d'autres utilisateurs, et en essayant de le tirer de la appareil.
- si cela échoue, il transmet le contenu du fichier sur le terminal à la machine locale. Il exécute une astuce supplémentaire pour supprimer
\r
caractères que certains appareils sortent à l'enveloppe.
D'ici vous pouvez utiliser une variété d'applications CLI ou GUI SQLite, telles que sqlite3
ou sqlitebrowser
, pour parcourir le contenu de la base de données.
suivre ces étapes
1 >télécharger le *.fichier jar à partir de ici .
2 >mets le *.jar file dans le dossier eclipse/ dropins / et redémarrez eclipse.
3 >en haut à droite de l'éclipse, cliquez sur l'icône DDMS.
4 >sélectionnez l'émulateur approprié dans le panneau de gauche.
5 dans L'onglet File Explorer du panneau principal, allez dans /data/data / [YOUR.APP.NAMESPACE] / bases de données.
6 >sous l'icône du SGDD, une nouvelle icône bleue d'une base de données devrait s'allumer lorsque vous sélectionnez votre base de données. Cliquez dessus et vous verrez un onglet Questoid Sqlite Manager s'ouvrir pour voir vos données.
* Note: si la base de données ne s'allume pas, c'est peut-être parce que votre base de données ne s'allume pas. avoir un *.db l'extension de fichier. Assurez-vous que votre base de données s'appelle [DATABASE_NAME].db
* Note: Si vous voulez utiliser un DB sans .db-Extension:
- téléchargez ce Questoid SqLiteBrowser: télécharger ici .
- Décompressez et mettez-le dans eclipse/dropins (pas Plugins).
- Voir plus d'informations Cliquez ici .
essayez Stetho sur facebook.
Stetho est un pont de débogage pour les applications Android, permettant les puissants outils de développement Chrome et bien plus encore.
étape 1 copier cette classe dans votre paquet
l'étape 2 mettez le code suivant dans votre classe qui étend SQLiteOpenHelper.
//-----------------for show databasae table----------------------------------------
public ArrayList<Cursor> getData(String Query)
{
//get writable database
SQLiteDatabase sqlDB =this.getWritableDatabase();
String[] columns = new String[] { "mesage" };
//an array list of cursor to save two cursors one has results from the query
//other cursor stores error message if any errors are triggered
ArrayList<Cursor> alc = new ArrayList<Cursor>(2);
MatrixCursor Cursor2= new MatrixCursor(columns);
alc.add(null);
alc.add (null);
try{
String maxQuery = Query ;
//execute the query results will be save in Cursor c
Cursor c = sqlDB.rawQuery(maxQuery, null);
//add value to cursor2
Cursor2.addRow(new Object[] { "Success" });
alc.set(1,Cursor2);
if (null != c && c.getCount() > 0)
{
alc.set(0,c);
c.moveToFirst();
return alc ;
}
return alc;
}
catch(SQLException sqlEx)
{
Log.d("printing exception", sqlEx.getMessage());
//if any exceptions are triggered save the error message to cursor an return the arraylist
Cursor2.addRow(new Object[] { ""+sqlEx.getMessage() });
alc.set(1,Cursor2);
return alc;
}
catch(Exception ex)
{
Log.d("printing exception",ex.getMessage());
//if any exceptions are triggered save the error message to cursor an return the arraylist
Cursor2.addRow(new Object[] { ""+ex.getMessage() });
alc.set(1,Cursor2);
return alc;
}
}
étape 3 registre du Manifeste 151980920"
<activity
android:name=".database.AndroidDatabaseManager"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar"/>
étape 4
Intent i = new Intent(this, AndroidDatabaseManager.class);
startActivity(i);
cela fonctionne avec Android 6.0 (applications déboguables au moins):
adb shell "run-as your.package.name cp /data/data/your.package.name/databases/you-db-name /sdcard/file_to_write"
alors vous pouvez simplement voir le DB avec aSQLiteManager par exemple.
vous pouvez essayer SQLiteOnWeb . Il gère votre base de données SQLite dans le navigateur.
Espère que cela vous aide à
en utilisant le Terminal First point votre emplacement où andriod sdk est loacté
eg: C:\Users\AppData\Local\Android\sdk\platform-tools>
vérifier ensuite la liste des dispositifs attachés en utilisant
adb devices
et ensuite exécuter cette commande pour copier le fichier à partir du périphérique vers votre système
adb -s YOUR_DEVICE_ID shell run-as YOUR_PACKAGE_NAME chmod -R 777 /data/data/YOUR_PACKAGE_NAME/databases && adb -s YOUR_DEVICE_ID shell "mkdir -p /sdcard/tempDB" && adb -s YOUR_DEVICE_ID shell "cp -r /data/data/YOUR_PACKAGE_NAME/databases/ /sdcard/tempDB/." && adb -s YOUR_DEVICE_ID pull sdcard/tempDB/ && adb -s YOUR_DEVICE_ID shell "rm -r /sdcard/tempDB/*"
vous pouvez trouver le fichier de base de données dans ce chemin
Android\sdk\platform-tools\tempDB\databases
il y a TKlerx Android SQLite browser for Eclipse , et il est entièrement fonctionnel avec Android Studio. Je le recommande, parce que c'est immensément pratique.
pour l'installer sur le moniteur de L'appareil, il suffit de placer le fichier JAR dans [Path to Android SDK folder]/sdk/tools/lib/monitor-[...]/plugins
.
avec file explorer, vous pouvez localiser votre fichier de base de données comme ceci:
data-->data-->your.package.name-->databases--->yourdbfile.db
alors vous pouvez utiliser N'importe quel SQLite pour explorer votre base de données. J'utilise le Gestionnaire SQLite Firefox addon. C'est joli, petit et rapide.
premier message ( https://stackoverflow.com/a/21151598/4244605 ) ne fonctionne pas pour moi.
j'ai écrit mon propre script pour obtenir le fichier DB à partir de l'appareil. Sans racine. Travail sur OK.
- copier le script dans le répertoire avec adb (par exemple:
~/android-sdk/platform-tools
). - dispositif doivent être connectés à L'ordinateur.
- utilisez
./getDB.sh -p <packageName>
pour obtenir le nom des bases de données.
Utilisation: ./getDB.sh -p <packageName> -n <name of DB> -s <store in mobile device>
pour obtenir le fichier DB (où le script est exécuté) répertoire.
je vous recommande de définir le nom de fichier de DB comme *.sqlite et l'ouvrir avec Firefox addon: SQLite Manager.
(c'est un long moment, quand j'ai écrit quelque chose en Bash. Vous pouvez modifier ce code.)
#!/bin/sh
# Get DB from Android device.
#
Hoption=false
Poption=false
Noption=false
Soption=false
Parg=""
Narg=""
Sarg=""
#-----------------------FUNCTION--------------------------:
helpFunc(){ #help
echo "Get names of DB's files in your Android app.
Usage: ./getDB -h
./getDB -p packageName -n nameOfDB -s storagePath
Options:
-h Show help.
-p packageName List of databases for package name.
-p packageName -n nameOfDB -s storagePath Save DB from device to this directory."
}
#--------------------------MAIN--------------------------:
while getopts 'p:n:s:h' options; do
case $options in
p) Poption=true
Parg=$OPTARG;;
n) Noption=true
Narg=$OPTARG;;
s) Soption=true
Sarg=$OPTARG;;
h) Hoption=true;;
esac
done
#echo "-------------------------------------------------------
#Hoption: $Hoption
#Poption: $Poption
#Noption: $Noption
#Soption: $Soption
#Parg: $Parg
#Narg: $Narg
#Sarg: $Sarg
#-------------------------------------------------------"\n
#echo $# #count of params
if [ $Hoption = true ];then
helpFunc
elif [ $# -eq 2 -a $Poption = true ];then #list
./adb -d shell run-as $Parg ls /data/data/$Parg/databases/
exit 0
elif [ $# -eq 6 -a $Poption = true -a $Noption = true -a $Soption = true ];then #get DB file
#Change permissions
./adb shell run-as $Parg chmod 777 /data/data/$Parg/databases/
./adb shell run-as $Parg chmod 777 /data/data/$Parg/databases/$Narg
#Copy
./adb shell cp /data/data/$Parg/databases/$Narg $Sarg
#Pull file to this machine
./adb pull $Sarg/$Narg
exit 0
else
echo "Wrong params or arguments. Use -h for help."
exit 1;
fi
exit 0;