База данных Android SQLite заблокирована после сбоя во время транзакции - PullRequest
1 голос
/ 09 апреля 2011

Если мое приложение будет уничтожено во время транзакции (т.е. в позиции 1 в исходном коде ниже), база данных будет заблокирована. Приложение было убито либо с помощью диспетчера задач, либо завершено из-за отладчика (я знаю, что диспетчер задач не должен использоваться, и я знаю, что это моя ошибка - завершение приложения на данном этапе ;-)) - но в любом случае это может произойти.

Если я попытаюсь перезапустить приложение, sqlite не сможет открыть базу данных, поскольку она заблокирована (даже после перезапуска устройства). В файловой системе есть файл базы данных и файл журнала. Как я могу восстановить базу данных и открыть ее снова?

  final SQLiteDatabase db = mDb.getDb();
  try {
       db.beginTransaction();
       //execute some updates (1)
        db.setTransactionSuccessful();
   } finally {
        db.endTransaction();
   }

В данный момент доступ к базе данных осуществляется только одним потоком, и существует только один экземпляр базы данных.

1 Ответ

0 голосов
/ 29 апреля 2011

Что сработало для меня, так это удалить файл журнала перед открытием базы данных ...

Или обработать поврежденный файл журнала каким-либо образом.

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