2010-08-06 201 views
1
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(); 

從LOCAT結果誤差Android的sqlite異常,如何解決?

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

當你把數據庫鎖定,我想你試圖從2個不同的線程訪問它? – Sephy 2010-08-06 09:49:36

+0

thx sephy,我修改了這個bug – fonter 2010-08-27 00:52:57

回答

1

這似乎是問題的所在:

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

所以這讓我思考的文件權限,當我開始爲馬上試圖調試我的實際手機上的東西,我注意到/數據文件夾無法在文件瀏覽器中訪問,結果是手機沒有植入,這是正常的。讓我們更進一步,我認爲程序也可能無法訪問/ data文件夾中的任何內容,除了一個用於它自己的目錄的目錄。所以如果你的軟件包沒有被命名爲「com.android.browser」,它很可能無法讀取該文件夾,因此試圖打開文件會失敗。也不完全確定這是否適用於此,但我也遇到了使用絕對路徑時會失敗的情況,但是當您使用相對路徑到達同一位置時會發生這種情況。所以爲此我會說使用

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

,所以如果你的包被命名爲com.android.browser我的建議應該在同一地點花掉它。如果不是,那很可能它沒有權限訪問其他應用程序的文件。我認爲獲得許可是可能的,但是你必須做一些事情來讓他們共享文件。我確實在某處讀過android通常在一個單獨的空間中運行每個應用程序,它說它爲每個應用程序使用單獨的Linux帳戶,這就是android os所建立的。

因此,如果您試圖編輯內置瀏覽器中的書籤,我不認爲您可以直接修改它的數據庫,因爲您無法修改該程序以告訴它與您的程序共享它的文件;但是你可能會發送意圖到應用程序並讓它以這種方式執行。