So verwenden Sie ADB in Android Studio zum Anzeigen einer SQLite-Datenbank


82

Ich muss meine SQLite-Datenbank anzeigen, weiß aber nicht, wie es geht. Ich bin zu http://www.sqlite.org/download.html gegangen und habe die Befehlszeilen-Shell für mein Betriebssystem heruntergeladen, aber wenn ich das Programm ausführe und tippe, adb ...erhalte ich Fehler.

Hinweis: Ich verwende Android Studio, daher gehe ich davon aus, dass ich nichts extra installieren muss, da ich mich erinnere, dass Android Studio alle benötigten SDK-Tools verwendet hat.

Antworten:


158

Einfachster Weg: Stellen Sie über ADB Shell eine Verbindung zu Sqlite3 her

Ich habe in Android Studio keine Möglichkeit gefunden, dies zu tun, aber ich greife mit einer Remote-Shell auf die Datenbank zu, anstatt jedes Mal die Datei abzurufen.

Alle Informationen finden Sie hier: http://developer.android.com/tools/help/sqlite3.html

1- Wechseln Sie an einer Eingabeaufforderung zu Ihrem Plattform-Tools-Ordner

2- Geben Sie den Befehl ein adb devices, um die Liste Ihrer Geräte abzurufen

C:\Android\adt-bundle-windows-x86_64\sdk\platform-tools>adb devices
List of devices attached
emulator-xxxx   device

3- Schließen Sie eine Shell an Ihr Gerät an:

C:\Android\adt-bundle-windows-x86_64\sdk\platform-tools>adb -s emulator-xxxx shell

4a- Sie können diesen Schritt auf einem gerooteten Gerät umgehen

run-as <your-package-name> 

4b- Navigieren Sie zu dem Ordner, der Ihre Datenbankdatei enthält:

cd data/data/<your-package-name>/databases/

5- Führen Sie sqlite3 aus, um eine Verbindung zu Ihrer Datenbank herzustellen:

sqlite3 <your-db-name>.db

6- Führen Sie sqlite3-Befehle aus, die Ihnen gefallen, z.

Select * from table1 where ...;

Hinweis: Weitere Befehle zum Ausführen finden Sie unten.

SQLite Cheatsheet

Es gibt einige Schritte, um die Tabellen in einer SQLite-Datenbank anzuzeigen:

  1. Listen Sie die Tabellen in Ihrer Datenbank auf:

    .tables
  2. Listen Sie auf, wie die Tabelle aussieht:

    .schema tablename
  3. Drucken Sie die gesamte Tabelle:

    SELECT * FROM tablename;
  4. Listen Sie alle verfügbaren SQLite-Eingabeaufforderungsbefehle auf:

    .help

1
Benötigt diese Methode root?
Tomislav2012

1
@ Tomislav2012 Ja, da Sie in das /data/dataVerzeichnis gehen
Dheeraj Bhaskar

1
Der Befehl sqlite3 wird auf meinem HTC One S mit Android 4.1
Alex

@ Alex Ich würde vorschlagen, sqlite3 zu finden und es zu installieren, wenn es möglich ist. Die Entwicklung ist damit einfacher
Dheeraj Bhaskar

1
Vielen Dank. Wenn Sie eine SQLite-Datei auf Ihren Computer-Desktop übertragen möchten, können Sie dies zuerst tun cp /data/data/<your-package-name>/databases/<your-db-name>.db /sdcard. Verwenden Sie dann einen Dateimanager wie Explorer, um die Datei an Ihre E-Mail zu senden. :)
Cheok Yan Cheng

76

Der einfachste Weg für mich ist die Verwendung des Android-Gerätemonitors, um die Datenbankdatei abzurufen, und des SQLite-Datenbankbrowsers, um die Datei anzuzeigen, während Android Studio weiterhin zum Programmieren von Android verwendet wird.

1) Führen Sie die Datenbank-App mit dem Android-Emulator von Android Studio aus und starten Sie sie. (Ich habe einige Daten in die Datenbank-App eingefügt, um sie zu überprüfen.)

2) Führen Sie den Android-Gerätemonitor aus. Wie läuft man?; Gehe zu [your_folder] > sdk >tools. Sie können monitor.bat in diesem Ordner sehen. shift + right clickim Ordner und wählen Sie " Open command window here". Diese Aktion startet die Eingabeaufforderung. Typ monitorund Android-Gerätemonitor werden gestartet.

3) Wählen Sie den Emulator aus, den Sie gerade ausführen. Dann geh zudata>data>[your_app_name]>databases

4) Klicken Sie auf das Symbol (oben rechts) (bewegen Sie den Mauszeiger über das Symbol und Sie sehen "Datei vom Gerät ziehen") und speichern Sie es an einer beliebigen Stelle

5) Starten Sie den SQLite DataBase Browser. Ziehen Sie die gerade gespeicherte Datei in diesen Browser und legen Sie sie dort ab.

6) Gehen Sie zur Browse DataRegisterkarte und wählen Sie Ihre Tabelle zum Anzeigen aus.

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein


9
Ich denke, Sie können das Datenverzeichnis nicht vom Geräte-Monitor aus öffnen, zumindest kann ich es nicht tun.
Estevex

6
Sie können das Datenverzeichnis nicht auf einem nicht gerooteten Gerät öffnen, aber Sie können es auf einem Emulator tun.
Tad

3
Wie öffne ich Daten auf einem nicht gerooteten Gerät?
Sujith Manjavana

4
Während der Emulator läuft, können Sie mit adb Dateien von emuliertem Android herunterladen. Beispiel: adb pull /data/data/com.yourpackagename.here/databases/yourdbfile.db
Baker

Ich denke, @SujithManjavana spricht davon, die SQLite-Datenbank einfach über den Datenbank-Browser zu öffnen, während sie sich im Emulatorpfad des Gast-Betriebssystems befand. Nicht nach dem Zurückkopieren auf das Host-Betriebssystem.
Pradeep Sanjaya

14

Das Problem, das Sie haben, ist häufig und wird in der Dokumentation nicht gut erklärt. Normale Geräte enthalten keine SQLite3-Datenbank-Binärdatei, weshalb eine Fehlermeldung angezeigt wird. Android Emeulator, OSX, Linux (falls installiert) und Windows (nach der Installation) verfügen über die Binärdatei, sodass Sie eine Datenbank lokal auf Ihrem Computer öffnen können.

Die Problemumgehung besteht darin, die Datenbank von Ihrem Gerät auf Ihren lokalen Computer zu kopieren. Dies kann mit ADB erreicht werden, erfordert jedoch eine Reihe von Schritten.

Bevor Sie beginnen, benötigen Sie einige Informationen:

  • Pfad des SDK (falls nicht in Ihrer Betriebssystemumgebung enthalten)
  • Ihr <package name>zum Beispielcom.example.application
  • a <local path>, um Ihre Datenbank zu platzieren, z. ~/Desktopoder%userprofile%\Desktop

Als nächstes müssen Sie verstehen, in welchem ​​Terminal jeder Befehl in das erste Zeichen in den folgenden Beispielen geschrieben wird, nicht eingegeben wird, sondern Sie wissen lassen, in welcher Shell wir uns befinden:

  • > = Sie OS Eingabeaufforderung
  • $ = ADB-Shell-Befehl Eingabeaufforderung
  • ! = ADB-Shell als Admin-Eingabeaufforderung
  • %

Geben Sie als Nächstes die folgenden Befehle über Terminal oder Befehl ein (geben Sie nicht das erste Zeichen oder den ersten Text ein ()).

> adb shell
$ su
! cp /data/data/<package name>/Databases/<database name> /sdcard
! exit
$ exit
> adb pull /sdcard/<database name> <local path>
> sqlite3 <local db path>
% .dump
% .exit  (to exit sqldb)

Dies ist eine sehr runde Methode, um die Datenbank auf Ihren lokalen Computer zu kopieren und die Datenbank lokal zu lesen. Es gibt SO und andere Ressourcen, die erklären, wie Sie die sqlite3-Binärdatei von einem Emulator auf Ihrem Gerät installieren. Bei einem einmaligen Zugriff funktioniert dieser Vorgang jedoch.

Wenn Sie interaktiv auf die Datenbank zugreifen müssen, würde ich empfehlen, Ihre App in einem Emulator (der bereits sqlite3 hatte) auszuführen oder sqlite auf Ihrem Geräte- / xbin-Pfad zu installieren .


9
  1. Öffnen Sie ein Terminal
  2. cd <ANDROID_SDK_PATH>(für mich unter Windows cd C:\Users\Willi\AppData\Local\Android\sdk)
  3. cd platform-tools
  4. adb shell (Dies funktioniert nur, wenn nur ein Emulator ausgeführt wird.)
  5. cd data/data
  6. su (Superuser-Berechtigungen erhalten)
  7. cd <PACKAGE_NAME>/databases
  8. sqlite3 <DB_NAME>
  9. SQL-Anweisungen ausgeben ( wichtig: Beenden Sie sie mit ;, andernfalls wird die Anweisung nicht ausgegeben und bricht stattdessen in eine neue Zeile ein.)

Hinweis: Verwenden Sie ls(Linux) oder dir(Windows), wenn Sie Verzeichnisinhalte auflisten müssen.


8

Was wird erwähnt, wenn Sie adb eingeben?

step1. >adb shell
step2. >cd data/data
step3. >ls -l|grep "your app package here"
step4. >cd "your app package here"
step5. >sqlite3 xx.db

Nun ... ich weiß nicht, wo adbich tippen soll ... Wenn ich es in die SQLite3-Shell tippe, gibt es mir ...>und es erwartet eine Fortsetzung eines Befehls. Es wartet im Grunde auf eine ;. Wenn ich das Semikolon eingebe, das ich erhalte error: near "adb": syntax error... Wenn ich adb shelleine Eingabeaufforderung eingebe, wird mir mitgeteilt, dass adb kein erkannter Befehl ist ... Soll ich meinen Pfaddateien adb hinzufügen?
Terence Chow

Zuerst: Sie müssen in die ADB-Shell gelangen (Mac oder Linux: Im Terminal ausführen; Windows: Mit Cmd ausführen). Dann müssen Sie sqlite3 commond in der ADB-Shell ausführen.
Log1000

1
Wie führe ich den Befehl sqlite3 über die ADB-Shell aus? es heißt: /system/bin/sh: sqlite3: not found... und ich habe bereits SQLite3 und ADB als Pfadvariablen hinzugefügt ...
Terence Chow

Welches Gerät verwenden Sie? Ich
log1000

5

Sie können ein sehr schönes Tool verwenden, das aufgerufen Stethowird, indem Sie es der build.gradleDatei hinzufügen :

compile 'com.facebook.stetho:stetho:1.4.1'

Und initialisiert es in Ihrer Applicationoder Activity onCreate()Methode:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Stetho.initializeWithDefaults(this);
    setContentView(R.layout.activity_main);
}

Dann können Sie die DB-Datensätze in Chrom unter der folgenden Adresse anzeigen :

chrome://inspect/#devices

Für weitere Details können Sie meinen Beitrag lesen: So zeigen Sie einfach Ihre Datenbankaufzeichnungen an


4

Abhängig von den Geräten finden Sie den Befehl sqlite3 möglicherweise nicht in der ADB-Shell. In diesem Fall möchten Sie möglicherweise Folgendes befolgen:

ADB Shell

$ run-as package.name
$ cd ./databases/
$ ls -l #Finden Sie die aktuellen Berechtigungen - r = 4, w = 2, x = 1
$ chmod 666 ./dbname.db
$ exit
$ exit
adb pull / data /data/package.name/databases/dbname.db ~ / Desktop /
adb push ~ / Desktop / dbname.db /data/data/package.name/databases/dbname.db
adb shell
$ run-as package.name
$ chmod 660 ./databases/dbname.db #Wiederherstellen der ursprünglichen Berechtigungen
$ exit
$ exit

Informationen finden Sie unter https://stackoverflow.com/a/17177091/3758972 .

Es kann Fälle geben, in denen nach dem oben beschriebenen Verfahren "Remote-Objekt nicht gefunden" angezeigt wird. Ändern Sie dann die Berechtigung Ihres Datenbankordners in der ADB-Shell in 755.

$ chmod 755 Datenbanken /

Aber bitte beachten Sie, dass es nur auf Android-Version <21 funktioniert.


Versuchte dies (beginnend mit "adb shell", dann mit "chmod", dann mit "adb pull" der Datenbank), erhalte aber einen "adb: error: Remote-Objekt '/ path / to / db' konnte nicht angegeben werden: Berechtigung verweigert "Fehler. Und der "chmod 666" schien zu funktionieren (es gab sowieso keinen Fehler). Ich war in der Vergangenheit in der Lage, die Datenbankdatei mit Android Device Monitor abzurufen, aber wenn ich es jetzt versuche, kann ich nicht einmal das anfängliche "Daten" -Verzeichnis erweitern. Ich habe Android Device Monitor mit laufendem Emulatorfenster und nicht mit denselben Ergebnissen ausprobiert. Gott, das ist dumm.
Clamum

Als neuen Hack können Sie die Stetho-Bibliothek für alle Daten- und Netzwerküberwachungszwecke verwenden. github.com/facebook/stetho
Nitesh Verma

Hmmm, ja, ich denke ich muss Stetho benutzen. Ich habe es bereits empfohlen gesehen, aber nicht bemerkt, dass ich damit SQL-Abfragen ausführen kann, sodass es für mich funktioniert. Ich verwende keinen Chrome-Browser mehr, aber wenn ich ihn installieren kann, kann ich ihn überprüfen und gegen Android-Datenbank abfragen, dann mache ich das. Es ist nicht so, dass der Android Device Monitor-Weg superschnell war. Sie müssten die Datenbank ziehen und sie dann trotzdem in einer anderen App öffnen. Danke Nitesh.
Clamum
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.