2011-10-05 169 views
0

编辑:假设这个职位的根植电话。Android - SQLite数据库访问

我删除了之前发布在这个主题上的一个问题,因为没有答案甚至接近回答这个问题。长话短说,我需要打开一个数据库并修改现有记录。我不想使用“助手类”,因为我实际上希望看到并理解几行代码中发生的情况,而不是包含100行代码的不必要的(用于我的目的)类。所以请不要告诉我“使用记事本教程”。我有,并没有解释我需要什么。

为了简化,这里是我在做什么:

SQLiteDatabase myDB = this.openOrCreateDatabase("/data/data/MY_APP/databases/settings.db", MODE_PRIVATE, null); 
myDB.execSQL("INSERT INTO my_table (SOME_FIELD) VALUES ('SOME_VALUE');"); 

这个工程非常漂亮。但是,如果我尝试在另一个路径中打开/编辑数据库,则失败。例如,我可能想要编辑另一个应用程序使用的数据库。我怎样才能做到这一点?这是一个简单的权限问题吗?它应该工作,如果我的应用程序请求并获得root权限?

编辑:我可以在手机上安装大量应用程序,可以编辑系统上的每个单一数据库,所以显然这可以完成。

+1

“编辑系统中的每个单独的数据库” - 你有什么说的这些神奇的应用程序? – Merlin

+0

@ Merlin你真的从没见过DB编辑器应用程序吗? “SQLite编辑器”在市场上。它可以让你打开,查看,编辑手机上的任何数据库。我怀疑这是神奇的。 –

+1

除非它被植根,否则你不能在'/ data/data/some_other_app'中看到任何东西 – Merlin

回答

0

正如this答复中提到,除非这两个应用共享相同的用户ID和相同的签名密钥

+0

那么所有的SQLite编辑器应用程序如何做呢? –

+0

嗯,它看起来好像根植电话可能会这样做。它也看起来像一个无根的手机能够访问存储在SD卡上的数据库,你可以给代码[这里](http://stackoverflow.com/questions/1055188/can-i-download-an-sqlite -db-on-sdcard-and-access-it-from-my-android-app/1055566#1055566)试一试。 – liftdeadtrees

+0

我不想从另一个应用程序的数据库读取数据,我只想从我自己的应用程序的/ assets /文件夹中读取数据。 – marienke

0

签署关于Android的安全性,你不能访问其他应用程序的数据库,则无法访问其他人的应用DB直接。如果其他应用程序创建ContentProvider,则可以通过其提供程序访问其数据库(如果存在)。否则,AFAIK没有出路。

+1

这显然是不准确的,否则像“SQLite编辑器”这样的应用程序将不存在于市场中。显然这是可能的。 –

+0

xjaphx。这是你正在谈论的内部数据库的事情,但如果数据库是在SD卡,那么我想我可以访问其他应用程序。 – Unknown

0

我不知道你是否仍在寻找这个答案。我期待着做同样的事情,但无法找到任何东西。我知道我需要使用root进程,但是再次找不到任何东西。我开始乱搞,只是尝试了很多随机的东西,终于找到了一个办法。

为我工作的简短版本是你需要,作为根,更改数据库的权限,直接访问它(不通过一个sqlite帮手),做任何你想要的,然后把权限回来。我详细的这一切在我的博客:

http://rratmansky.wordpress.com/?p=259&preview=true