2009-12-26 3 views
10

Ich habe die Antwort auf eine Frage gelesen, wie man auf den Inhalt der Datenbanken zugreifen kann, aber ich kann nicht scheinen, dass es auf meinem Rechner funktioniert. Hier ist das Shell-Protokoll:Wie können Sie auf die Inhalte von Android Emulator-Datenbanken zugreifen?

C:\android-sdk-windows\tools>adb -s emulator-5554 shell 
# sqlite3 /data/data/com.android.demo.notepad2/databases/notes 
sqlite3 /data/data/com.android.demo.notepad2/databases/notes 
SQLite version 3.5.9 
Enter ".help" for instructions 
sqlite> .tables 
.tables 
sqlite> ^C 
C:\android-sdk-windows\tools> 

SQLite einfach Echo meiner Befehle zu mir zurück, auch wenn der Eclipse-Datei-Browser mir sagt es existiert. Wenn ich das sqlite3-Tool verwende und ".tables" verwende, werden die Befehle akzeptiert.

Ist die SQLite-Syntax anders durch den Emulator ist mir etwas fehlt?

(Sorry für so viele Fragen, scheint es nicht viel zusammenhängende Dokumentation auf Android zu sein!)

Dank!

+0

"SQLite einfach meine Befehle zurück zu mir, auch wenn der Eclipse-Datei-Browser sagt mir, es existiert. Wenn ich das SQLite3-Tool verwenden und" .tables "verwenden die Befehle acc abgefragt. " Diese beiden Sätze scheinen genau das Gegenteil zu sagen: Es funktioniert gleichzeitig und funktioniert nicht. Könnten Sie bitte klarstellen, was Sie hier meinen? Wenn Sie Ihren Quellcode formatieren und Listen mit dem Symbol "Codebeispiel" in der Symbolleiste (101 010) ausgeben, sind sie für uns etwas einfacher zu lesen. – CommonsWare

+0

Ich meine zu sagen, wenn ich den Code oben (in der Android-Shell) ausführen Echos zurück, aber wenn ich das sqlite3-Tool über die Windows-Befehlszeile ausführen und eine Datenbank erstellen, funktionieren alle Befehle wie erwartet. Vielen Dank :) – Jumbo

Antwort

13

Ich kann Ihnen sagen, dass es für mich auf Android 2.0.1 funktioniert gut:

$ adb shell 
# cd /data/data/apt.tutorial 
# ls 
lib 
databases 
shared_prefs 
# cd databases 
# ls 
lunchlist.db 
# sqlite3 lunchlist.db 
SQLite version 3.5.9 
Enter ".help" for instructions 
sqlite> .tables 
android_metadata restaurants  
sqlite> .exit 
# exit 

Sie können jederzeit laden Sie die Datenbankdatei mit DDMS oder adb pull und verwenden Sie einen Desktop-SQLite-Client zu untersuchen es. Zum Beispiel verwende ich das SQLite Manager Plugin für Firefox.

Auch bedenken Sie, dass SQLite keine Standard-Dateierweiterung hat, so dass, wenn Sie Ihre Datenbank nicht notes aber notes.db oder notes.sqlite oder etwas ist, müssen Sie die Erweiterung angeben.

Auch habe ich nicht versucht, dies unter Windows, und es gibt eine Möglichkeit, dass es etwas doof mit der Windows-Eingabeaufforderung und die begrenzte Shell auf Android-Geräten, die Ihre Schwierigkeit verursacht.

3

Wenn Sie in Skripten sqlite3-Anweisungen von der Kommandozeile etwas wie

$ adb -e shell sqlite3 -batch /data/data/com.example.dbsample/databases/db '.tables' 
android_metadata 

$ adb -e shell sqlite3 -batch /data/data/com.example.dbsample/databases/db 'select * from android_metadata;' 
en_US 

die offensichtlichen Vorteile sind, dass Sie auf Ihrer Shell Geschichte verlassen können und Sie können dies nutzen, ausgegeben werden soll.

1

Ich hatte das gleiche Problem und festgestellt, dass im Gegensatz zu der Dokumentation sollten Sie nicht die Erweiterung ". Db" auf den Namen der Datenbankdatei.

Hinweis: Ich verwende Win7 und 2.1 Emulator.

0

Ich hatte das gleiche Problem, verbrachte fast eine Stunde, hier zu buchen, so dass es jemand anderen Zeit sparen wird, überprüfen Sie, ob Sie den richtigen Dateinamen zusammen mit der Erweiterung gegeben haben, gibt es zwei Dateien im Ordner Datenbanken myDB.db und mydb.db-Journal und wenn ich lief
"sqlite3 /data/data/com.my.package/databases/myDB"
und
.tables
aufgeführt nichts, sqlite3 eine neue db mit dem Namen myDB erstellt, Es öffnete sich nicht meinDB.db