Android sqlite异常,如何修复?

时间:2010-08-06 06:04:25

标签: android sqlite

SQLiteDatabase database = SQLiteDatabase.openDatabase("/data/data/com.android.browser/databases/browser.db",
null, 0);
database.setLockingEnabled(true);

database.delete("bookmarks", "_id=2", null);
database.close();

错误

08-06 05:53:45.769: ERROR/tt(958): android.database.sqlite.SQLiteException: error code 14: unable to open database file
08-06 05:53:45.769: ERROR/tt(958):     at android.database.sqlite.SQLiteStatement.native_execute(Native Method)
08-06 05:53:45.769: ERROR/tt(958):     at android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:66)
08-06 05:53:45.769: ERROR/tt(958):     at android.database.sqlite.SQLiteDatabase.delete(SQLiteDatabase.java:1362)
08-06 05:53:45.769: ERROR/tt(958):     at com.iwidsets.sqlite.manager.SQLiteManager.onCreate(SQLiteManager.java:48)
08-06 05:53:45.769: ERROR/tt(958):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
08-06 05:53:45.769: ERROR/tt(958):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2231)
08-06 05:53:45.769: ERROR/tt(958):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2284)
08-06 05:53:45.769: ERROR/tt(958):     at android.app.ActivityThread.access$1800(ActivityThread.java:112)
08-06 05:53:45.769: ERROR/tt(958):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692)
08-06 05:53:45.769: ERROR/tt(958):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-06 05:53:45.769: ERROR/tt(958):     at android.os.Looper.loop(Looper.java:123)
08-06 05:53:45.769: ERROR/tt(958):     at android.app.ActivityThread.main(ActivityThread.java:3948)
08-06 05:53:45.769: ERROR/tt(958):     at java.lang.reflect.Method.invokeNative(Native Method)
08-06 05:53:45.769: ERROR/tt(958):     at java.lang.reflect.Method.invoke(Method.java:521)
08-06 05:53:45.769: ERROR/tt(958):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
08-06 05:53:45.769: ERROR/tt(958):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
08-06 05:53:45.769: ERROR/tt(958):     at dalvik.system.NativeStart.main(Native Method)

1 个答案:

答案 0 :(得分:1)

来自locat结果的

似乎是问题所在:

SQLiteDatabase database = SQLiteDatabase.openDatabase("/data/data/com.android.browser/databases/browser.db", null, 0);

所以这让我想到了文件权限,当我开始尝试在我的实际手机上调试内容时,我注意到在文件浏览器中无法访问/ data文件夹,如果手机没有根据那就是正常。让我们更进一步,我认为程序也可能无法访问/ data文件夹中的任何内容,除了一个目录是它自己的东西。因此,如果您的软件包未被命名为“com.android.browser”,它可能无法读取该文件夹,因此尝试打开其中的文件将失败。也不完全确定这是否适用于此,但我也遇到了在使用绝对路径时失败但在使用相同路径到相同位置时工作的情况。所以为此我会说使用

SQLiteDatabase database = SQLiteDatabase.openDatabase("browser.db", null, 0);

所以如果你的软件包名为com.android.browser,我的建议应该把它放在同一个地方。如果不是那么它很可能没有其他应用程序文件的权限。我认为获得许可是可能的,但你必须对这两个程序做一些事情以使它们能够共享文件。我确实读过某个地方,android通常在一个单独的空间中运行每个应用程序,它说它到目前为每个使用单独的Linux帐户,这就是android os构建的内容。

所以,如果您尝试在内置浏览器中编辑书签,我认为您不能直接修改它的数据库,因为您无法修改该程序以告诉它与您的程序共享它的文件;但是你可以向应用程序发送意图并让它以这种方式进行。