【问题标题】:Sqlite error: unable to open database "/data/data/PackageName/databases/SampleDB.db": unable to open database fileSqlite 错误:无法打开数据库“/data/data/PackageName/databases/SampleDB.db”:无法打开数据库文件
【发布时间】:2015-10-18 18:37:19
【问题描述】:

通过命令提示符连接到 android 中的 Sqlite DB 时出现错误。

以下是我遵循的步骤:

  • 我已经通过android中的java程序创建了Sqlite DB。创建表并将数据插入其中。执行查询以获取数据。一切都好!!!!
  • 试图通过命令提示符连接到数据库:

    D:\adt-bundle-windows-x86-20131030\adt-bundle-windows-x86-20131030\sdk\platform-tools> adb shell
    
    adb shell
    
    root@generic:/ #  sqlite3 /data/data/package-name/databases/SampleDB.db
    
    sqlite3 /data/data/package-name/databases/Samp
    ant.encryptdata/databases/Samp                                                <leDB.db
    
    SQLite version 3.7.11 2012-03-20 11:35:50
    Enter ".help" for instructions
    Enter SQL statements terminated with a ";"
    
    sqlite> .tables
    .tables
    
    SQL Error: unable to open database "/data/data/com.congnizant.encryptdata/databases/SampleDB.db": unable to open database file
    1|root@generic:/ # 
    

其实我想张贴截图以便更好地理解,但我不知道为什么它不起作用(可能是因为我的办公室防火墙)。

Permision for SampleDB is '-rw-rw----';

那么我在哪里做衣服呢?

注意:数据库存在一个示例表,我可以将数据读写到该表中。

【问题讨论】:

  • 您是否拥有该文件的读取权限??我不确定,但我想你需要同样的 root 访问权限
  • 查看权限@stackoverflow.com/questions/9997976/…Lam Vin 的回答
  • @Raghunandan 您可以检查文件权限的编辑。我已经浏览了您在第一条评论中引用的错误建议的帖子

标签: android database sqlite


【解决方案1】:
I had similar below issue on android emulator:

**Issue:**
1)generic_x86:/ $     sqlite3 EmployeeRecords
SQLite version 3.9.2 2015-11-02 18:31:45
Enter ".help" for usage hints.

2)sqlite> select * from employee
   ...> ;

Error: unable to open database "EmployeeRecords": unable to open database file

**Solution**

1)C:\Users\Hpo\AppData\Local\Android\sdk\platform-tools>adb shell
2)generic_x86:/ $ exit
3)C:\Users\Hpo\AppData\Local\Android\sdk\platform-tools>adb root
4)C:\Users\Hpo\AppData\Local\Android\sdk\platform-tools>adb root restarting adbd as root
5)C:\Users\Hpo\AppData\Local\Android\sdk\platform-tools>adb shell
6)generic_x86:/ # cd /data/data/com.example.hpo.crud_myapplication/databases/
7)generic_x86:/data/data/com.example.hpo.crud_myapplication/databases # 
sqlite3  EmployeeRecords
8)sqlite> select * from employee
   ...> ;
1|sachin|15000

and it's working.

【讨论】:

    【解决方案2】:

    这看起来和我不久前一样的问题。

    你可以先测试一下。使用adb shell 连接到设备后,请尝试ls data/data/&lt;application_namespace_id&gt;/databases/。如果它返回opendir failed, Permission denied,那应该是我遇到的同样的问题:ADB 权限问题。这就是解决我的问题的方法:

    1. 转到您设备中的“开发者选项”(如果您看不到它,请转到您手机中的“设置”>“关于手机”,然后点击“内部版本号”几次,直到启用“开发者选项”)
    2. 然后确保“开发者选项”已实际启用
    3. 在“开发者选项”屏幕上,启用“Android 调试”以允许 Android 调试
    4. 在同一屏幕上,确保 ADB 具有“根访问”权限

    现在,再次尝试您的命令。但是一旦你输入adb shell 也输入su 来启用超级用户模式。您应该会看到 # 在超级用户模式下确认您的 shell。

    如果您只连接了一台设备,它现在应该可以工作了。否则,您还应该通过列出您的设备首先运行adb devices 并连接到正确的设备adb -d &lt;device_reference_here&gt; shell 来确认您是否连接到正确的设备。

    您可能还需要将手机植根才能执行上述任何操作。

    希望对您有所帮助。干杯!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-01
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      • 2014-11-11
      • 2014-08-30
      • 2020-06-10
      • 2020-07-03
      相关资源
      最近更新 更多