Как использовать ADB в Android Studio для просмотра базы данных SQLite

83

Мне нужно просмотреть мою базу данных SQLite, но я не знаю, как это сделать. Я зашел на http://www.sqlite.org/download.html и загрузил оболочку командной строки для своей ОС, но когда я запускаю программу и набираю текст, adb ...я получаю ошибки.

Примечание. Я использую Android Studio, поэтому предполагаю, что мне не нужно ничего устанавливать дополнительно, потому что, как я помню, Android Studio заявила, что у нее есть все необходимые инструменты SDK.

Теренс Чоу
источник

Ответы:

160

Самый простой способ: подключиться к Sqlite3 через ADB Shell

Я не нашел способа сделать это в Android Studio, но я получаю доступ к базе данных с помощью удаленной оболочки вместо того, чтобы каждый раз извлекать файл.

Всю информацию можно найти здесь: http://developer.android.com/tools/help/sqlite3.html.

1- Перейдите в папку инструментов платформы в командной строке.

2- Введите команду, adb devicesчтобы получить список ваших устройств

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

3- Подключите оболочку к вашему устройству:

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

4- Вы можете пропустить этот шаг на корневом устройстве.

run-as <your-package-name> 

4b- Перейдите в папку, содержащую ваш файл db:

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

5- запустите sqlite3 для подключения к вашей базе данных:

sqlite3 <your-db-name>.db

6- запускайте команды sqlite3, которые вам нравятся, например:

Select * from table1 where ...;

Примечание. Ниже приведены дополнительные команды для выполнения.

Шпаргалка по SQLite

Чтобы просмотреть таблицы в базе данных SQLite, выполните несколько шагов:

  1. Перечислите таблицы в вашей базе данных:

    .tables
    
  2. Перечислите, как выглядит таблица:

    .schema tablename
    
  3. Распечатать всю таблицу:

    SELECT * FROM tablename;
    
  4. Перечислите все доступные команды подсказки SQLite:

    .help
    
Дирадж Бхаскар
источник
1
этот метод требует рут?
tomislav2012
1
@ tomislav2012 да, раз уж вы заходите в /data/dataкаталог
Дирадж Бхаскар
1
Команда sqlite3 не распознается в моем HTC One S под управлением Android 4.1
Alex
@Alex Я бы посоветовал найти sqlite3 и установить его, если это возможно, с ним разработка проще
Дирадж Бхаскар
1
Благодарю. Если вы хотите перенести файл sqlite на рабочий стол вашего компьютера, вы можете сначала cp /data/data/<your-package-name>/databases/<your-db-name>.db /sdcard. Затем используйте файловый менеджер, например Explorer, чтобы отправить файл на вашу электронную почту. :)
Cheok Yan Cheng
76

Самый простой способ для меня - использовать Android Device Monitor для получения файла базы данных и браузер SQLite DataBase для просмотра файла, все еще используя Android Studio для программирования Android.

1) Запустите и запустите приложение базы данных с эмулятором Android из Android Studio. (Я вставил данные в приложение базы данных для проверки)

2) Запустите Android Device Monitor. Как бежать ?; Идти к[your_folder] > sdk >tools . В этой папке вы можете увидеть файл monitor.bat. shift + right clickвнутри папки и выберите " Open command window here". Это действие запустит командную строку. type, monitorи будет запущен Android Device Monitor.

3) Выберите эмулятор, который вы используете в данный момент. Затем перейдите кdata>data>[your_app_name]>databases

4) Щелкните значок (находится в правом верхнем углу) (наведите указатель мыши на значок, вы увидите «вытащить файл с устройства») и сохраните в любом месте.

5) Запустите браузер базы данных SQLite. Перетащите файл, который вы только что сохранили, в этот браузер.

6) Перейдите на Browse Dataвкладку и выберите таблицу для просмотра.

введите описание изображения здесь введите описание изображения здесь

акнай
источник
9
Я думаю, вы не можете открыть каталог данных из Device Monitor, по крайней мере, я не могу этого сделать.
Estevex
6
Вы не можете открыть каталог данных на устройстве без рутирования, но вы можете сделать это в эмуляторе.
Tad
3
как открыть данные на устройстве без рута?
Суджит Манджавана
4
Пока эмулятор запущен, вы можете загружать файлы с эмулируемого Android с помощью adb. Пример: adb pull /data/data/com.yourpackagename.here/databases/yourdbfile.db
Baker
Я думаю, что @SujithManjavana говорит о том, чтобы просто открыть базу данных sqlite из браузера DataBase, пока она находилась в пути эмулятора в гостевой ОС. Не после копирования обратно в ОС хоста.
Прадип Санджая
14

Проблема, с которой вы столкнулись, является распространенной и плохо объясняется в документации. Обычные устройства не включают двоичный файл базы данных sqlite3, поэтому вы получаете сообщение об ошибке. Android Emeulator, OSX, Linux (если установлен) и Windows (после установки) имеют двоичный файл, поэтому вы можете открыть базу данных локально на своем компьютере.

Обходной путь - скопировать базу данных с вашего устройства на локальный компьютер. Это можно сделать с помощью ADB, но для этого потребуется несколько шагов.

Перед тем, как начать, вам понадобится некоторая информация:

  • путь к SDK (если он не включен в среду вашей ОС)
  • ваш <package name>, например,com.example.application
  • a <local path>для размещения вашей базы данных, например. ~/Desktopили же%userprofile%\Desktop

Затем вам нужно будет понять, в каком терминале каждая команда записывается, чтобы первый символ в приведенных ниже примерах не вводился, но позволяет узнать, в какой оболочке мы находимся:

  • > = командная строка вашей ОС
  • $ = Командная строка оболочки ADB
  • ! = Оболочка ADB в качестве командной строки администратора
  • %

Затем введите следующие команды из терминала или команды (не вводите первый символ или текст ())

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

Это действительно обходной способ копирования базы данных на локальный компьютер и локального чтения базы данных. Есть SO и другие ресурсы, объясняющие, как установить двоичный файл sqlite3 на ваше устройство из эмулятора, но для однократного доступа этот процесс работает.

Если вам нужно получить доступ к базе данных в интерактивном режиме, я бы предложил запустить ваше приложение в эмуляторе (в котором уже был sqlite3) или установить sqlite на ваши устройства / путь xbin .

Hoss
источник
9
  1. Откройте терминал
  2. cd <ANDROID_SDK_PATH>(для меня в Windows cd C:\Users\Willi\AppData\Local\Android\sdk)
  3. cd platform-tools
  4. adb shell (это работает, только если запущен только один эмулятор)
  5. cd data/data
  6. su (получить привилегии суперпользователя)
  7. cd <PACKAGE_NAME>/databases
  8. sqlite3 <DB_NAME>
  9. выдавать операторы SQL ( важно: завершить их ;, иначе оператор не выдается и вместо этого переводится на новую строку).

Примечание. Используйте ls(Linux) или dir(Windows), если вам нужно просмотреть содержимое каталога.

Вилли Ментцель
источник
8

Что он упоминает, когда вы набираете 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
источник
Что ж ... Я не знаю, где набирать adb... Когда я набираю его в оболочке SQLite3, он дает мне ...>и ожидает продолжения команды. В основном он ждет ;. Если я ввожу точку с запятой, я получаю error: near "adb": syntax error... Ввод adb shellв командной строке говорит мне, что adb не является распознанной командой ... Должен ли я добавить adb в свои файлы путей?
Теренс Чоу
сначала: вам нужно войти в оболочку adb (mac или linux: выполнить в терминале; окна: запустить в cmd); затем выполнить sqlite3 commond в оболочке adb.
log1000
1
Как выполнить команду sqlite3 из оболочки ADB? там написано: /system/bin/sh: sqlite3: not found... И я уже добавил SQLite3 и ADB в качестве переменных пути ...
Теренс Чоу,
какое устройство вы используете? желаю, чтобы это дало вам подсказку stackoverflow.com/questions/3645319/…
log1000
5

Вы можете использовать очень хороший инструмент Stetho, добавив его в build.gradleфайл:

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

И инициализировал его внутри вашего метода Applicationor Activity onCreate():

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

Затем вы можете просмотреть записи db в chrome по адресу:

chrome://inspect/#devices

Для более подробной информации вы можете прочитать мой пост: Как легко просматривать свои записи в БД

Ишахак
источник
4

В зависимости от устройств вы можете не найти команду sqlite3 в оболочке adb. В этом случае вы можете сделать следующее:

оболочка adb

$ run-as package.name
$ cd ./databases/
$ ls -l # Найти текущие разрешения - 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 # Восстановить исходные разрешения
$ exit
$ exit

для справки перейдите на https://stackoverflow.com/a/17177091/3758972 .

Могут быть случаи, когда вы получите сообщение «удаленный объект не найден» после выполнения описанной выше процедуры. Затем измените разрешение папки вашей базы данных на 755 в оболочке adb.

$ chmod 755 баз данных /

Но учтите, что он будет работать только на Android версии <21.

Нитеш Верма
источник
Пробовал это (начиная с «adb shell», затем выполняя «chmod», затем выполняя «adb pull» базы данных), но получил «adb: error: failed to stat remote object '/ path / to / db': В разрешении отказано "ошибка. И "chmod 666" вроде сработал (все равно ошибки не было). Раньше мне удавалось вытащить db-файл с помощью Android Device Monitor, но если я попробую сейчас, я даже не смогу расширить исходный каталог «data». Я пробовал Android Device Monitor с запущенным окном эмулятора и не работал с теми же результатами. Боже, это глупо.
clamum
В качестве нового хака вы можете использовать стето-библиотеку для всех целей мониторинга данных и сети. github.com/facebook/stetho
Нитеш Верма
Хммм, да, думаю, мне придется использовать Стето. Я видел, что это рекомендовано раньше, но не понимал, что могу выполнять с ним SQL-запросы, так что он мне подходит. Я больше не использую браузер Chrome, но если его установка позволяет мне проверять и запрашивать базы данных Android, я это сделаю. Не то чтобы способ Android Device Monitor был очень быстрым, вам все равно придется вытащить db, а затем открыть его в другом приложении. Спасибо, Нитеш.
clamum