Некоторые устройства Android сообщают, что таблица (базы данных SQLite) не существует - PullRequest
1 голос
/ 24 января 2012

Я написал приложение для Android, которое использует базу данных SQLite, которая сохраняется в папке активов.Эта база данных имеет 4 таблицы: "table1", "table2" и "table3" и "android_metadata".Приложение отлично работает на большинстве устройств, но сообщалось о некоторых сбоях.Поэтому я использовал acra (Application Crash Report для Android, http://code.google.com/p/acra/), чтобы собрать журнал.Я уверен, что в базе данных есть таблица «table2», однако в журнале говорится, что такой таблицы нет.Мне действительно интересно, почему он работает нормально на некоторых устройствах, но падает на некоторых других?Модель телефона Samsung GT-I9001GT, Android 2.3.3.У некоторых HTC desire HD тоже была эта проблема.Пожалуйста, помогите мне решить это.Спасибо.

(размер файла базы данных - 33 КБ)

Журнал

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)

Ответы [ 2 ]

1 голос
/ 24 января 2012

Вы действительно должны проверить устройства, которые вы готовы поддерживать. См

/data/ 

и проверьте, есть ли у вас соответствующая таблица. Я был там, и некоторые устройства действительно отличаются по именам пакетов и т. Д.

Вы можете использовать приложение, например, aSQLiteManager для просмотра схем.

Другие полезные источники:

Отладка базы данных sqlite на устройстве

Android: где хранятся файлы базы данных?

0 голосов
/ 24 января 2012

Мой вопрос: есть ли у вас другие ошибки SQL в журналах ACRA? В частности, о повреждении базы данных?

В моем вопросе: Лучшее обнаружение повреждения SQLite Я представил быстрый анализ поведения SQLite при случайном изменении файла БД. Когда «SELECT *» не удался, иногда SQLite утверждал, что это потому, что таблица не существует. Когда я загружал измененный файл БД в редактор, все таблицы отсутствовали, поэтому случайное изменение файла БД может фактически стереть все ваши таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...