SQLITE_CORRUPT проблема в iphone - PullRequest
0 голосов
/ 18 мая 2011

Недавно я реализовал компонент кэша в своем приложении для iPhone, которое использует SQLite.Я пишу и читаю данные изначально без какой-либо оболочки оболочки.Проблема заключается в том, что после некоторого использования приложения оно начинает получать код состояния SQLITE_CORRUPT в ответ на любой оператор SQL, который я выполняю в БД.

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

Кто-нибудь может помочь с этим?Во-первых, как, черт возьми, БД попадает в эту ситуацию, и, во-вторых, как или где я могу увидеть данные?

Спасибо, Гай.

1 Ответ

1 голос
/ 18 мая 2011

Вы можете сослаться на эту официальную документацию .Здесь они упомянули, что вероятность повреждения БД очень мала.

Они также перечислили шансы , как БД может быть повреждена.И оттуда обратитесь к следующему примеру, который может вызвать проблему, к базе данных.

  CREATE TABLE ex1(a INTEGER PRIMARY KEY, b);
  INSERT INTO ex1 VALUES(1,2);
  INSERT INTO ex1 VALUES(2,3);
  CREATE TRIGGER ex1_tr1 AFTER UPDATE ON ex1 BEGIN
    DELETE FROM ex1 WHERE a=old.b;
  END;

  UPDATE ex1 SET b=b+1;

В приведенном выше примере первый цикл UPDATE вызывает срабатывание триггера и удаление второй строки таблицы ex1.Когда выполняется второй цикл цикла UPDATE, он пытается обработать вторую строку таблицы ex1.SQLite распознал, что вторая строка была удалена, поэтому он прерывает второй цикл, но не может правильно выполнить очистку после себя, что может привести к повреждению базы данных в последующих циклах цикла.

Итак, в основном вам нужно выяснить ситуацию, в которой это произошло, в вашем коде, отладкой или следуя инструкциям вашего приложения или любого другого механизма.

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