Jak używać ADB w Android Studio do przeglądania bazy danych SQLite

83

Muszę wyświetlić moją bazę danych SQLite, ale nie wiem, jak to zrobić. Poszedłem na http://www.sqlite.org/download.html i pobrałem powłokę wiersza poleceń dla mojego systemu operacyjnego, ale kiedy uruchamiam program i adb ...piszę, otrzymuję błędy.

Uwaga: używam Android Studio, więc zakładam, że nie muszę instalować niczego dodatkowego, ponieważ przypominam sobie, że Android Studio powiedział, że ma wszystkie potrzebne narzędzia SDK.

Terence Chow
źródło

Odpowiedzi:

160

Najłatwiejszy sposób: połącz się z Sqlite3 przez ADB Shell

Nie znalazłem żadnego sposobu, aby to zrobić w Android Studio, ale uzyskuję dostęp do bazy danych za pomocą zdalnej powłoki zamiast ciągnąć plik za każdym razem.

Znajdź wszystkie informacje tutaj: http://developer.android.com/tools/help/sqlite3.html

1- Przejdź do folderu narzędzi platformy w wierszu polecenia

2- Wprowadź polecenie, adb devicesaby uzyskać listę swoich urządzeń

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

3- Podłącz obudowę do swojego urządzenia:

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

4a- Możesz ominąć ten krok na zrootowanym urządzeniu

run-as <your-package-name> 

4b- Przejdź do folderu zawierającego plik db:

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

5- Uruchom sqlite3, aby połączyć się z bazą danych:

sqlite3 <your-db-name>.db

6- Uruchom polecenia sqlite3, które lubisz, np:

Select * from table1 where ...;

Uwaga: poniżej znajdziesz więcej poleceń do uruchomienia.

Ściągawka z SQLite

Aby zobaczyć tabele w bazie danych SQLite, wykonaj kilka kroków:

  1. Wypisz tabele w swojej bazie danych:

    .tables
    
  2. Wypisz, jak wygląda tabela:

    .schema tablename
    
  3. Wydrukuj całą tabelę:

    SELECT * FROM tablename;
    
  4. Wymień wszystkie dostępne polecenia SQLite:

    .help
    
Dheeraj Bhaskar
źródło
1
czy ta metoda wymaga rootowania?
tomislav2012
1
@ tomislav2012 tak, ponieważ wchodzisz do /data/datakatalogu
Dheeraj Bhaskar
1
sqlite3 polecenie nie jest rozpoznawane w moim HTC One S z systemem Android 4.1
Alex
@Alex Sugerowałbym znalezienie sqlite3 i zainstalowanie go, jeśli to możliwe, rozwój jest z nim prostszy
Dheeraj Bhaskar
1
Dzięki. Jeśli chcesz przenieść plik sqlite na pulpit komputera, możesz najpierw cp /data/data/<your-package-name>/databases/<your-db-name>.db /sdcard. Następnie użyj menedżera plików, takiego jak Explorer, aby wysłać plik na swój adres e-mail. :)
Cheok Yan Cheng,
76

Najłatwiejszym sposobem jest użycie Android Device Monitor, aby pobrać plik bazy danych i SQLite DataBase Browser, aby wyświetlić plik, podczas gdy nadal używam Android Studio do programowania Androida.

1) Uruchom i uruchom aplikację bazy danych za pomocą emulatora Androida z Android Studio. (Wstawiłem dane do aplikacji bazy danych w celu weryfikacji)

2) Uruchom Monitor urządzenia Android. Jak biegać ?; Idź do [your_folder] > sdk >tools. Możesz zobaczyć monitor.bat w tym folderze. shift + right clickwewnątrz folderu i wybierz „ Open command window here”. Ta akcja uruchomi wiersz polecenia. typ monitori Android Device Monitor zostanie uruchomiony.

3) Wybierz emulator, z którego aktualnie korzystasz. Następnie idź dodata>data>[your_app_name]>databases

4) Kliknij ikonę (znajdującą się w prawym górnym rogu) (najedź kursorem na ikonę, a zobaczysz „pobierz plik z urządzenia”) i zapisz w dowolnym miejscu

5) Uruchom przeglądarkę SQLite DataBase. Przeciągnij i upuść plik, który właśnie zapisałeś w tej przeglądarce.

6) Przejdź do Browse Datazakładki i wybierz tabelę do wyświetlenia.

wprowadź opis obrazu tutaj wprowadź opis obrazu tutaj

aknay
źródło
9
Myślę, że nie możesz otworzyć katalogu danych z monitora urządzeń, przynajmniej ja nie mogę tego zrobić.
Estevex,
6
Nie możesz otworzyć katalogu danych na nierootowanym urządzeniu, ale możesz to zrobić na emulatorze.
Tad
3
jak otworzyć dane na nierootowanym urządzeniu?
Sujith Manjavana
4
Gdy emulator jest uruchomiony, możesz pobierać pliki z emulowanego Androida za pomocą adb. Przykład: adb pull /data/data/com.yourpackagename.here/databases/yourdbfile.db
Baker
Myślę, że @SujithManjavana mówi o otwarciu bazy danych sqlite z przeglądarki DataBase, gdy była w ścieżce emulatora w systemie gościa. Nie po skopiowaniu z powrotem do systemu operacyjnego hosta.
Pradeep Sanjaya
14

Problem, który masz, jest powszechny i ​​nie został dobrze wyjaśniony w dokumentacji. Zwykłe urządzenia nie zawierają pliku binarnego bazy danych sqlite3, dlatego pojawia się błąd. Android Emeulator, OSX, Linux (jeśli jest zainstalowany) i Windows (po zainstalowaniu) mają plik binarny, dzięki czemu możesz otworzyć bazę danych lokalnie na swoim komputerze.

Sposób obejścia problemu polega na skopiowaniu bazy danych z urządzenia na komputer lokalny. Można to osiągnąć za pomocą ADB, ale wymaga to kilku kroków.

Zanim zaczniesz, będziesz potrzebować kilku informacji:

  • ścieżka do SDK (jeśli nie jest uwzględniona w środowisku systemu operacyjnego)
  • <package name>na przykład twójcom.example.application
  • a <local path>do umieszczenia bazy danych, np. ~/Desktoplub%userprofile%\Desktop

Następnie musisz zrozumieć, w jakim terminalu każde polecenie jest zapisywane do pierwszego znaku w poniższych przykładach, nie jest wpisywane, ale informuje, w jakiej powłoce się znajdujemy:

  • > = wiersz poleceń systemu operacyjnego
  • $ = Wiersz polecenia powłoki ADB
  • ! = Powłoka ADB jako wiersz poleceń administratora
  • %

Następnie wprowadź następujące polecenia z terminala lub polecenia (nie wprowadzaj pierwszego znaku ani tekstu ())

> 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)

Jest to naprawdę okrągły sposób kopiowania bazy danych na komputer lokalny i lokalnego odczytu bazy danych. Istnieje SO i inne zasoby wyjaśniające, jak zainstalować plik binarny sqlite3 na twoim urządzeniu z emulatora, ale jeden raz uzyskaj dostęp do tego procesu.

Jeśli potrzebujesz interaktywnie uzyskać dostęp do bazy danych, sugerowałbym uruchomienie aplikacji w emulatorze (który już miał sqlite3) lub zainstalowanie sqlite na twoich urządzeniach / ścieżce xbin .

hoss
źródło
9
  1. Otwórz terminal
  2. cd <ANDROID_SDK_PATH>(dla mnie w systemie Windows cd C:\Users\Willi\AppData\Local\Android\sdk)
  3. cd platform-tools
  4. adb shell (działa to tylko wtedy, gdy działa tylko jeden emulator)
  5. cd data/data
  6. su (uzyskaj uprawnienia superużytkownika)
  7. cd <PACKAGE_NAME>/databases
  8. sqlite3 <DB_NAME>
  9. wydaje instrukcje SQL ( ważne: zakończ je ;, w przeciwnym razie instrukcja nie zostanie wydana i zamiast tego zostanie przerwana na nowy wiersz).

Uwaga: użyj ls(Linux) lub dir(Windows), jeśli chcesz wyświetlić zawartość katalogu.

Willi Mentzel
źródło
8

O czym wspomina podczas wpisywania adb?

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
log1000
źródło
Cóż ... nie wiem, gdzie wpisać adb... Kiedy wpisuję to w powłoce SQLite3, daje mi ...>to i oczekuje kontynuacji polecenia. W zasadzie czeka na plik ;. Jeśli wpiszę średnik, który otrzymuję error: near "adb": syntax error... Wpisanie adb shellw wierszu polecenia mówi mi, że adb nie jest rozpoznawanym poleceniem ... Czy mam dodać adb do moich plików ścieżki?
Terence Chow
najpierw: musisz dostać się do powłoki adb (mac lub linux: wykonaj w terminalu; windows: uruchom z cmd); następnie wykonaj sqlite3 commond w powłoce adb.
log1000
1
Jak wykonać polecenie sqlite3 z powłoki ADB? jest napisane: /system/bin/sh: sqlite3: not found... I dodałem już SQLite3 i ADB jako zmienne ścieżki ...
Terence Chow
jakiego urządzenia używasz? Chciałbym, żeby to dało nam wskazówkę stackoverflow.com/questions/3645319/ ...
log1000
5

Możesz użyć bardzo fajnego narzędzia o nazwie Stetho, dodając to do build.gradlepliku:

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

I zainicjowałem go w swojej metodzie Applicationlub Activity onCreate():

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

Następnie możesz przeglądać rekordy db w chrome pod adresem:

chrome://inspect/#devices

Aby uzyskać więcej informacji, przeczytaj mój post: Jak łatwo przeglądać swoje rekordy bazy danych

yshahak
źródło
4

W zależności od urządzeń możesz nie znaleźć polecenia sqlite3 w powłoce adb. W takim przypadku możesz chcieć wykonać następujące czynności:

powłoka adb

$ run-as package.name
$ cd ./databases/
$ ls -l # Znajdź aktualne uprawnienia - 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 # Przywróć oryginalne uprawnienia
$ exit
$ exit

w celach informacyjnych przejdź do https://stackoverflow.com/a/17177091/3758972 .

Może się zdarzyć, że po wykonaniu powyższej procedury pojawi się komunikat „Nie znaleziono obiektu zdalnego”. Następnie zmień uprawnienia do folderu bazy danych na 755 w powłoce adb.

Bazy danych $ chmod 755 /

Ale pamiętaj, że będzie działać tylko na Androidzie w wersji <21.

Nitesh Verma
źródło
Próbowałem tego (zaczynając od „adb shell”, następnie wykonując „chmod”, a następnie wykonując „adb pull” bazy danych), ale otrzymałem komunikat „adb: error: nie udało się stat zdalny obiekt„ / path / to / db ”: Odmowa uprawnień ”. I "chmod 666" wydawał się działać (i tak nie było żadnego błędu). W przeszłości mogłem pobrać plik db za pomocą Android Device Monitor, ale jeśli spróbuję go teraz, nie mogę nawet rozszerzyć początkowego katalogu „data”. Wypróbowałem Android Device Monitor z uruchomionym oknem emulatora i nie działającym z tymi samymi wynikami. Boże, to jest głupie.
clamum
Jako nowy hack możesz używać biblioteki stetho do wszystkich celów monitorowania danych i sieci. github.com/facebook/stetho
Nitesh Verma
Hmmm, tak, chyba będę musiał użyć Stetho. Widziałem to wcześniej, ale nie zdawałem sobie sprawy, że mogę z nim uruchamiać zapytania SQL, więc zadziała. Nie używam już przeglądarki Chrome, ale jeśli zainstalowanie jej pozwala mi sprawdzać i wyszukiwać bazy danych systemu Android, to zrobię to. To nie jest tak, że sposób monitorowania urządzeń z Androidem był super szybki, musisz wyciągnąć bazę danych, a następnie otworzyć ją w innej aplikacji. Dzięki Nitesh.
clamum