Sqlite错误:无法打开数据库“/data/data/PackageName/databases/SampleDB.db”:无法打开数据库文件

时间:2015-07-28 09:27:49

标签: android database sqlite

我通过命令提示符连接到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----';

那我在做什么?

注意:数据库存在一个样本表,我可以将写入数据读入该表。

2 个答案:

答案 0 :(得分:4)

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.

答案 1 :(得分:3)

不久前,它看起来像是我的同一个问题。

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

  1. 转到设备中的“开发者选项”(如果看不到它,请转到手机中的“设置”&gt;“关于手机”,然后点按“内置号码”几次,直到启用“开发人员选项”)
  2. 然后确保实际启用“开发人员选项”
  3. 在“开发者选项”屏幕上,启用“Android调试”以允许Android调试
  4. 在同一屏幕上,确保ADB具有“Root access”权限
  5. 现在,再试一次你的命令。但是,一旦您输入adb shell,也请输入su以启用超级用户模式。您应该看到#在超级用户模式下确认您的shell。

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

    您可能还需要根据自己的手机执行此操作。

    希望它有所帮助。干杯!