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

7

我在通过命令提示符连接Android上的Sqlite数据库时遇到了错误。

以下是我遵循的步骤:

  • I have created Sqlite DB through java program in android. Created table and inserted data into it. Executed query to get data. Everything fine!!!!
  • Tried to conned to DB though Command Prompt :

    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 访问权限。 - Raghunandan
请查看Lam Vin在https://dev59.com/h2kw5IYBdhLWcg3wSorA上的回答,以检查权限。 - Raghunandan
@Raghunandan,您可以检查文件权限的编辑。我已经阅读了您建议的帖子,在第一条评论中引用了错误。 - Sidharth Dash
2个回答

5

看起来跟我之前的问题一样。

你可以先试试以下操作。连接到设备后使用 adb shell 命令,然后尝试运行 ls data/data/<application_namespace_id>/databases/ 命令。如果返回 opendir failed, Permission denied,那么可能是和我遇到的问题一样:ADB 权限问题。以下是解决我的问题的步骤:

  1. 打开你的设备上的“开发者选项”(如果不可见,可以在手机中转到“设置”>“关于手机”,点击“版本号”多次,直到开启“开发者选项”)
  2. 确保已经开启了“开发者选项”
  3. 在“开发者选项”屏幕上,启用“Android 调试”
  4. 在同一屏幕上,确保 ADB 在“Root 访问”中拥有权限

现在,再试试你的命令。但是,在输入 adb shell 后,也输入 su 以启用超级用户模式。你应该会看到一个 #,表示你的 shell 正处于超级用户模式。

如果你只连接了一个设备,现在应该可以正常工作了。否则,你还需要通过运行 adb devices 命令列出你的设备,并连接到正确的设备,使用命令 adb -d <device_reference_here> shell

你可能还需要对手机进行 root,才能执行以上操作。

希望能帮到你。祝好!


5
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.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接