Повреждение файла базы данных Android - PullRequest
1 голос
/ 10 ноября 2011

У меня есть приложение, которое позволяет пользователю сохранять файлы базы данных приложения SQLite на SD-карту.Эта функция существует уже более года и работает просто отлично.У меня были пользователи, присылавшие мне по электронной почте свои файлы базы данных в тех случаях, когда произошла ошибка, которую я не мог воспроизвести.

Недавно пользователь отправил мне файлы своей базы данных, и когда я попытался загрузить их в свое приложение (поместив их в расположение файла базы данных приложения), приложение упало при попытке открыть файл базы данных.Этот пользователь ранее отправлял мне свои файлы без проблем.

Единственные различия между моим приложением тогда и сейчас: 1) я добавил функциональность app-2-SD, и 2) мои цели приложения2.2 сейчас против 1.6 тогда (но 1.5 является минимальной версией SDK в обоих случаях).

Пользователь сказал, что он поместил приложение на SD-карту, а затем приложение начало падать.Это даже не дает ему возможность отправить сообщение об ошибке.

Когда я поместил его файлы в эмулятор, я получил следующую трассировку стека:

11-09 22:32:04.275: ERROR/AndroidRuntime(757): Caused by: android.database.sqlite.SQLiteException: file is encrypted or is not a database
11-09 22:32:04.275: ERROR/AndroidRuntime(757):     at android.database.sqlite.SQLiteDatabase.native_setLocale(Native Method)
11-09 22:32:04.275: ERROR/AndroidRuntime(757):     at android.database.sqlite.SQLiteDatabase.setLocale(SQLiteDatabase.java:1636)
11-09 22:32:04.275: ERROR/AndroidRuntime(757):     at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1586)
11-09 22:32:04.275: ERROR/AndroidRuntime(757):     at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:638)
11-09 22:32:04.275: ERROR/AndroidRuntime(757):     at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:168)

Он послал мне по электронной почтеданные раньше, и файлы имели правильное имя базы данных и расширение, поэтому я даю ему преимущество сомнения и не предполагаю, что он отправил неправильный файл.Кто-нибудь видел эту проблему раньше и знает о возможных причинах и / или решениях?

Обновление В случае какой-либо разницы я узнал от пользователя, что его телефон - HTCЭво 4G.Я думал, что где-то читал о зашифрованных файлах базы данных в более поздних выпусках Android, где файлы базы данных хранятся в / data / secure / ... вместо / data / data / ... Интересно, может ли это быть связано?В любом случае, после дальнейшего опроса пользователя, я, по крайней мере, знаю, что это одна конкретная таблица в файле базы данных, которая имеет проблему.Различные части моего приложения взаимодействуют с различными таблицами в файле базы данных.Приложение работает нормально и позволяет ему сохранять / читать данные, когда он обращается к другим таблицам, но когда он обращается к одной конкретной таблице, просто попытка открыть файл приводит к его ошибке.Я думаю, что могу добавить некрасивое исправление, которое перехватывает это исключение, если оно возникает, а затем удаляет поврежденную таблицу и затем воссоздает ее.Мысли?

1 Ответ

0 голосов
/ 10 ноября 2011

У меня также есть приложение с (довольно маленьким) БД, и недавно я получаю отчеты о сбоях из-за проблем с БД, которые я не могу воспроизвести.

Игра с моим приложением и толкание его, наконец, вызвали сбои.

Причиной в моем случае было то, что из-за many fast opening/closing/update requests, interruption of the app, language changes during the app, etc so the system somehow corrupted the db.

Решение, которое я реализовал сейчас:

a. close/reopen the db often to avoid problems 

b. have a consistency-check routine for every save or retrieve of data now - lots of overhead - but that cleared it fo me so far...

ps Я не получил такой же отчет о сбое, как ваш. Сейчас у меня на столе есть пара разных телефонов Android для тестирования, и я почти никогда не ломал их вместе с новейшими моделями высокого класса. Похоже, что такие проблемы возникают чаще с телефонами с меньшей памятью или процессором с более низкой скоростью, чем с быстрыми высококлассными. - но, честно говоря, я все еще смущен этим! ... возможно, с этим как-то связано использование SD-карты?

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