簡體   English   中英

某些Android設備報告(SQLite數據庫的)表不存在

[英]Some Android devices report that the table (of a SQLite database) does not exist

我編寫了一個使用SQLite數據庫的Android應用程序,該數據庫保存在資產文件夾中。 該數據庫具有4個表:“ table1”,“ table2”,“ table3”和“ android_metadata”。 該應用程序在大多數設備上均可正常運行,但已報告了一些崩潰信息。 因此,我使用了acra(Android應用程序崩潰報告, http://code.google.com/p/acra/ )來收集日志。 我確定數據庫中有“ table2”表,但是日志中說沒有這樣的表。 我真的想知道為什么它在某些設備上可以正常工作,而在另一些設備上崩潰嗎? 手機型號為Samsung GT-I9001GT,Android 2.3.3。 一些HTC希望HD也有此問題。 請幫我解決。 謝謝。

(數據庫文件大小為33KB)

日志記錄

java.lang.RuntimeException: Unable to start activity ComponentInfo{english.idiom/english.idiom.Category2Activity}: android.database.sqlite.SQLiteException: no such table: table2: , while compiling: SELECT subject,table2_id FROM table2 WHERE table1_id=8
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:123)
    at android.app.ActivityThread.main(ActivityThread.java:3687)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: android.database.sqlite.SQLiteException: no such table: table2: , while compiling: SELECT subject,table2_id FROM table2 WHERE table1_id=8
    at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
    at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:92)
    at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:65)
    at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:83)
    at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:49)
    at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42)
    at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1356)
    at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1324)
    at english.idiom.Category2Activity.getContents(Category2Activity.java:176)
    at english.idiom.Category2Activity.Initialize(Category2Activity.java:138)
    at english.idiom.Category2Activity.onCreate(Category2Activity.java:70)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
    ... 11 more
android.database.sqlite.SQLiteException: no such table: table2: , while compiling: SELECT subject,table2_id FROM table2 WHERE table1_id=8
    at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
    at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:92)
    at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:65)
    at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:83)
    at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:49)
    at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42)
    at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1356)
    at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1324)
    at english.idiom.Category2Activity.getContents(Category2Activity.java:176)
    at english.idiom.Category2Activity.Initialize(Category2Activity.java:138)
    at english.idiom.Category2Activity.onCreate(Category2Activity.java:70)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:123)
    at android.app.ActivityThread.main(ActivityThread.java:3687)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
    at dalvik.system.NativeStart.main(Native Method)

您確實必須檢查您願意支持的設備。 看到

/data/ 

並檢查您是否具有相應的表。 我去過那里,有些設備在包裝命名等方面確實有所不同。

您可以使用aSQLiteManager之類的應用來瀏覽架構。

其他有用的資料:

在設備上調試sqlite數據庫

Android:數據庫文件存儲在哪里?

我的問題是:ACRA日志中是否還有其他SQL錯誤? 特別是關於數據庫損壞?

在我的問題中: 更好的SQLite損壞檢測我展示了對DB文件進行隨機修改時SQLite行為的快速分析。 當“ SELECT *”失敗時,有時SQLite聲稱這是因為該表不存在。 當我將修改后的數據庫文件加載到編輯器中時,所有表都丟失了-因此,對數據庫文件的隨機修改實際上可能會擦除所有表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM