我尝试使用adb来查询我的sqlite3数据库。我在我的应用程序模拟器上使用此数据库没有任何问题,但我无法从adb shell查询它。我在这里和Android开发者指南上阅读了很多内容,以了解我的问题/错误,但我还没有解决任何问题。
以下是我尝试从adb查询数据库时会发生的情况:
adb -s emulator-5554 shell
sqlite3 /data/data/rf.stats/databases/sstatsdb.db
SQLite版本3.5.9
输入“.help”获取说明 源码> .tables
源码>从游戏中选择*; SQL错误:没有这样的表:游戏
源码> .databases
seq名称文件
--- --------------- -------------------------------- --------------------------
0 main /data/data/rf.stats/databases/sstatsdb.db
1个temp / sqlite_stmt_journals / etilqs_H2EoeecYlb1UK2U
为什么我不能从adb shell查询我的数据库,因为它在模拟器中有效?
我使用的是Android 10.0.1和Java SDK 6的Ububtu Lucid。
答案 0 :(得分:2)
adb无权查看手机上的/data
。模拟器没有此限制。它是安全模型的一部分,阻止人们访问属于第三方应用程序的数据。
有两种方法可以解决这个问题:
官方方法是将您的应用程序设置为可调试(通过将android:debuggable="true"
放入清单中的<application>
元素),然后使用DDMS;但是,我从来没有设法做到这一点。
非正式但更有用的方法是使用SuperOneClick之类的东西越狱手机。这将允许您以root身份使用adb登录,这将使您可以完全访问手机上的所有数据(包括您的应用程序)。
答案 1 :(得分:1)
这适用于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 shell导航到属于你的特定应用程序的数据库目录,然后运行sqlite3进行查询。否则sqlite3将无法查找正确的位置。
皮特
答案 2 :(得分:0)
我建议检查您询问的表是否确实存在于此数据库中,因为
sqlite> .tables
应返回在/data/data/rf.stats/databases/sstatsdb.db数据库中创建的所有表。以下是填充的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
答案 3 :(得分:0)
我遇到了这个问题。输入sqlite3 /data/data/rf.stats/databases/sstatsdb
没有.db
。
希望它能解决你的问题。