SQLite3权限被拒绝(Android)

12

我试图直接在我的Nexus上访问我正在开发的应用程序的数据库,但是当我尝试执行"sqlite3"命令时,出现了"权限被拒绝"的错误。 我还尝试以root模式启动adb,但设备上仍然显示"权限被拒绝"... 我想我必须使用模拟器来完成这个任务,但我有很多数据需要加载,如果使用手机连接wifi的话,速度会比使用模拟器快十倍… 除非有人有什么好主意? 谢谢

4个回答

8

我曾经为此苦恼过一段时间,下面是我的解决方案,适用于非root设备:

#!/bin/sh

# fill these values in
PACKAGE=com.example.android
DB=something.db 

# copy db to sdcard using package permission (using cat because no cp    command)
adb shell "run-as $PACKAGE cat /data/data/$PACKAGE/databases/$DB >   /sdcard/$DB"

# pull file from sd card
adb pull /sdcard/$DB

# do something with it (need to install sqlitebrowser obviously)
sqlitebrowser $DB

谢谢@eggbert。这非常有帮助,对我很有效(在Ubuntu 10.04上使用),并尝试在未root的设备上调试应用程序。 - user755499
这个方法可行,但是在我的手机(HTC Desire)上,数据库文件末尾没有.db扩展名。 - HRJ

4
文件受到读取保护,您需要对手机进行root或使用模拟器。

3

典型的问题。

我通过为我的应用程序添加一个备份(复制)数据库到SD卡的功能来解决了这个烦恼。 adb pull 可以针对任何sdcard文件进行操作。

编辑:已修正“adb”拼写错误(原为“sdp”)。


什么是SDP?你能否请提供一个SDP的链接?谢谢。 - AlikElzin-kilaka
@kilaka:谢谢,我修正了我的拼写错误,应该是“使用adb pull命令”- Android调试桥。 - Brad Hein
它没有起作用是因为我的手机没有被root。但是在模拟器上可以工作。 - AlikElzin-kilaka
嘿,Brad,你能否提供一小段代码示例,演示如何复制一个现有的数据库,并使用模拟名称,例如data/data/your.package.name/databases/your.db? - Michael Alan Huff
嗨,Michael - 在这里查看copyfile函数:https://github.com/gtosoft/libvoyager/blob/master/src/com/gtosoft/libvoyager/db/DashDB.java - Brad Hein

0

我遇到了类似的问题。我从模拟器中拉出sqlite3并将其推送到我的设备上,但无法运行 - 权限被拒绝。

显然,sqlite3二进制文件没有执行权限(-rw-rw-rw-),因此使用chmod + x sqlite3解决了这个问题。


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