ADB не может показать / открыть / подключить базу данных - PullRequest
0 голосов
/ 31 мая 2011

Я пытаюсь использовать adb для запроса моего sqlite3 db. Я использую эту базу данных с моим приложением на эмуляторе без каких-либо проблем, но я не могу запросить ее из оболочки adb. Я много читал здесь и в руководстве для разработчиков Android, чтобы понять мою проблему / ошибку, но я ничего не решил.

Вот пример того, что происходит, когда я пытаюсь запросить базу данных из adb:

adb -s emulator-5554 shell
sqlite3 /data/data/rf.stats/databases/sstatsdb.db
SQLite версии 3.5.9
Введите ".help" для получения инструкций
sqlite> .tables
sqlite> выбрать * из игр;
Ошибка SQL: нет такой таблицы: игры
sqlite> .database
следующий файл имени
--- --------------- -------------------------------- --------------------------
0 main /data/data/rf.stats/databases/sstatsdb.db
1 temp / sqlite_stmt_journals / etilqs_H2EoeecYlb1UK2U

Почему я не могу запросить свою базу данных из оболочки adb, если она работает в эмуляторе?

Я на Ububtu Lucid с Android 10.0.1 и Java SDK 6.

Ответы [ 4 ]

2 голосов
/ 31 мая 2011

adb не имеет права заглядывать внутрь /data на телефоне.Эмулятор не имеет этого ограничения.Это часть модели безопасности, которая запрещает людям доступ к данным, принадлежащим сторонним приложениям.

Существует два способа обойти это:

  • Официальный способустановить ваше приложение как отлаживаемое (поместив android:debuggable="true" в элемент <application> в манифесте), а затем использовать DDMS;однако мне никогда не удавалось заставить это работать.

  • неофициальный, но гораздо более полезный способ - сделать джейлбрейк телефона, используя что-то вроде SuperOneClick .Это позволит вам войти в систему как root с помощью adb, что даст вам полный доступ ко всем данным на телефоне (включая ваше приложение).

1 голос
/ 26 января 2012

Это работает для меня в Windows, должно работать и для вас в Ubuntu. Сначала перейдите в каталог инструментов платформы:

> cd C:\Users\[Your Username]\android-sdks\platform-tools
> adb shell
> cd data/data/[application namespace]/databases/
# sqlite3 [Database Name].db
sqlite> select * from [Table Name];

Замените то, что находится в скобках "[" ... "]" на ваше, и оно должно работать. Хитрость заключается в том, что вы попадаете в оболочку adb, чтобы перейти в каталог баз данных, который принадлежит вашему конкретному приложению, а затем запустите sqlite3 для запроса. В противном случае sqlite3 не будет искать в правильном месте.

Пит

0 голосов
/ 18 июля 2011

Я столкнулся с этой проблемой.Наберите sqlite3 /data/data/rf.stats/databases/sstatsdb без .db.

Надеюсь, это решит вашу проблему.

0 голосов
/ 31 мая 2011

Я бы посоветовал проверить, действительно ли в этих базах данных есть таблица, о которой вы спрашиваете, потому что

sqlite> .tables

должен возвращать все таблицы, созданные в базе данных /data/data/rf.stats/databases/sstatsdb.db. Вот пример вывода заполненной БД:

sqlite3 webview.db
SQLite version 3.6.22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .tables
.tables
android_metadata  formdata          httpauth
cookies           formurl           password
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...