在开发Android手机应用时如何访问数据库?

10
我在手机开发时访问数据库时遇到了麻烦。每当我执行以下命令后:cd /data/data/com.mycompck/databases,然后运行ls,都会出现这样的错误信息:"opendir failed, Permission denied"。或者每当我输入sqlite3时,都会显示"sqlite3: permission denied"
我做错了什么?
是否有一些应用程序可以帮助我获取内容解析器值和/或SQLite数据库的人类视图呢?
5个回答

17

请查看以下讨论中的答案:为什么我在使用adb时会被拒绝访问数据文件夹?

从API级别8(Android 2.2)开始,如果将应用程序构建为可调试的,则可以使用shell run-as命令以特定用户/应用程序的身份运行命令或可执行文件,或者只是切换到您的应用程序的UID,以便可以访问其data目录。

因此,基本上您需要进行调试构建(每当您从Android Studio启动应用程序时都会自动进行构建,除非您请求发布版本),并运行以下命令:

run-as com.mycompck
cd /data/data/com.mycompck/databases
ls
sqlite3 ./yourdatabase.db

然而需要注意的是,许多手机默认情况下并没有安装sqlite3二进制文件。因此,您可能需要从某个地方下载它(例如从http://shortfuse.org/的SuperOneClick档案中),将其保存在SD卡上并使其可执行(尽管这有点棘手),例如:
run-as com.mycompck
cd /data/data/com.mycompck/
cat /sdcard/sqlite3 >./sqlite3
chmod 744 ./sqlite3
./sqlite3 ./databases/yourdatabase.db

所以你正在将sqlite3复制到应用程序目录中,然后更改权限为可执行。我猜这意味着在手机上删除应用程序之前,sqlite3的副本将存在于该目录中。那么我的问题是:重新安装应用程序会删除可执行文件吗(例如,在Eclipse中单击RUN)? - styfle
1
@styfle 当您在Eclipse中单击“运行”时,应用程序数据库和共享首选项不会被删除,对吗?sqlite3可执行文件也是如此。只有adb uninstall(不带-k选项)才会将其删除(或通过设备应用程序管理器手动卸载应用程序)。 - Idolon
我需要在Idea13CE(社区版本)做些什么来确保它正在进行调试构建吗? - rup3rt

1

回答您问题的第一部分,可以查看this answer。基本上,你的手机需要root访问权限,并且需要以root模式运行adb(使用“adb root”)。

至于第二部分,我使用SQLite Database Browser来查看我的SQLite数据库(虽然只有在数据库位于我的计算机上时才这样做;不知道是否有任何设备上的浏览器)。我不知道有什么办法可以获得内容解析器的人类视图。


为什么我需要 root 访问权限,我想要访问我的应用程序数据,作为开发者,我希望能够获得访问权限。 - Pentium10
adbd 无法在生产构建中以 root 权限运行 - Pentium10
4
请为您的应用程序添加一个导出或备份功能,它可以将数据库复制到SD卡中。 - CommonsWare
@Pentium10:因为这就是它的工作方式,非root访问权限被锁定在数据目录上。我不制定规则。:P 不过,CommonsWare说得对,那是一个不错的解决方法。 - Dan Lew
@Pentium10 自2010年以来,情况有些变化 :) 请查看下面的我的回答 - Idolon
@CommonsWare 谢谢..非常简单的想法...继续让人们成为忙碌的编码者。 - IronBlossom

0

你必须成为root用户才能访问任何数据库文件。因此,你可以在手机上获取root权限(在谷歌上查找信息),或者仅通过模拟器调试数据库(模拟器总是会给你root访问权限)。

再见!


很遗憾,我无法从模拟器中调试数据库,因为模拟器没有我正在使用的应用程序(议程、蓝牙、Wifi)。 - Pentium10
但是你可以将这些应用程序安装到模拟器上:adb install appname.apk 无论如何,我强烈建议您对手机进行root :) http://www.google.com.co/search?q=root+android - Cristian

0

查看和管理您的Android应用程序数据库的最佳方法是使用此库 https://github.com/sanathp/DatabaseManager_For_Android

这是一个单独的Java活动文件,只需将Java文件添加到源文件夹中,即可查看应用程序数据库中的表格,更新、删除、插入行到您的表格。一切都可以从您的应用程序中完成。

开发完成后,从src文件夹中删除Java文件即可。

它对我很有帮助。希望对您也有所帮助。

您可以在此处查看1分钟演示:http://youtu.be/P5vpaGoBlBY


-1

我已经了解了一些关于这个问题的信息,移动设备上访问数据库文件似乎非常麻烦。

看看这个吧。使用它,你可以在应用程序内查看数据库。数据库管理器

对我来说,这很好用。当然,它也取决于你计划做什么。

希望能帮到你。


虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。如果链接页面更改,仅链接的答案可能会失效。-【来自审查】 - S.L. Barth
不错的观点。但是,这仍然是一种管理移动数据库的好方法。 - Feddex

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