В моем приложении для Android я получаю "образ диска базы данных, уродливо", Каковы причины получения этой ошибки?
не закрытый дб? несколько потоков, получающих доступ к дб? или андроид просто был поврежден?
Спасибо
android.database.sqlite.SQLiteDatabaseCorruptException: database disk image is malformed
android.database.sqlite.SQLiteQuery.native_fill_window(Native Method)
android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:75)
android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:288)
android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:269)
android.database.AbstractCursor.moveToPosition(AbstractCursor.java:171)
android.database.AbstractCursor.moveToFirst(AbstractCursor.java:248)
...
Ошибка передается из машинного кода в Java, поэтому вам нужно посмотреть возможные причины повреждения SQLite. Вот веб-страница на веб-сайте SQLite, где перечислены ошибки, связанные с ошибками в SQLite, а вот еще одна под названием Как повредить вашу базу данных .
Я встречал много случаев, когда люди сообщали о проблемах с повреждением sqlite на Android. В большинстве случаев это связано с убийцей задач, но все еще есть небольшая часть людей, которые все еще испытывают случайное повреждение SQLite.
Например, эта проблема: http://code.google.com/p/android/issues/detail?id=4866
Ссылки JRL выше также очень полезны для понимания того, какие типы событий могут привести к повреждению образа базы данных SQLite.
Кроме того, в последнее время в сам SQLite были внесены исправления для устранения различных (редких) сценариев повреждения данных. См. http://www.sqlite.org/changes.html . Таким образом, версия SQLite, поставляемая с Android, не самая последняя, но по мере развития Android меняются и приложения, связанные с ним, такие как SQLite.
В конце концов, мы, как программисты, можем сделать лишь так много для защиты от повреждения SQLite, поэтому иногда полезно использовать механизмы безопасности в наших приложениях, такие как периодическое резервное копирование БД на SDCard (это то, что я делаю).