【问题标题】:adb unable to show / open / connect databaseadb 无法显示/打开/连接数据库
【发布时间】:2011-05-31 09:58:02
【问题描述】:

我尝试使用 adb 来查询我的 sqlite3 数据库。我在模拟器上将此数据库与我的应用程序一起使用,没有任何问题,但我无法从 adb shell 查询它。我在这里和 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> .databases
序列名称文件
--- ---------------------------- -------------------------------- --------------------------
0 主 /data/data/rf.stats/databases/sstatsdb.db
1个临时/sqlite_stmt_journals/etilqs_H2EoeecYlb1UK2U

为什么我不能从 adb shell 查询我的数据库,因为它可以在模拟器中运行?

我在使用 Android 10.0.1 和 Java SDK 6 的 Ububtu Lucid。

【问题讨论】:

    标签: android adb


    【解决方案1】:

    adb 无权通过电话查看 /data 内部。模拟器没有这个限制。它是防止人们访问属于第三方应用程序的数据的安全模型的一部分。

    有两种方法可以解决这个问题:

    • 官方的方法是将你的应用设置为可调试的(通过将android:debuggable="true"放入清单中的<application>元素中),然后使用DDMS;但是,我从来没有设法完成这项工作。

    • 非官方但更有用的方法是使用类似SuperOneClick 的方式越狱手机。这将让您以 root 身份使用 adb 登录,然后您就可以完全访问手机上的所有数据(包括您的应用程序的数据)。

    【讨论】:

    • 非常感谢大卫。使用 DDMS,我可以在本地数据库上复制并显示自己的内容。
    【解决方案2】:

    这适用于我在 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 将不会在正确的位置查找。

    皮特

    【讨论】:

      【解决方案3】:

      我建议检查您询问的表是否确实存在于该数据库中,因为

      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
      

      【讨论】:

      • 使用 DDMS 我在模拟器上发现了错误的数据库(带有名称或错误名称的扩展名)我认为是由 ADB 创建的,但我输入了错误。被淘汰后,亚行也运作良好。谢谢 maciej-pigulski。
      【解决方案4】:

      我遇到了这个问题。输入sqlite3 /data/data/rf.stats/databases/sstatsdb 没有.db

      希望它能解决你的问题。

      【讨论】:

        猜你喜欢
        • 2011-04-24
        • 2013-01-10
        • 1970-01-01
        • 1970-01-01
        • 2016-06-05
        • 1970-01-01
        • 2016-12-07
        • 2014-06-06
        • 1970-01-01
        相关资源
        最近更新 更多