SQLite3 «база данных заблокирована» после 2. запуска - PullRequest
0 голосов
/ 11 июля 2011

В моем приложении для iPhone я хочу сделать резервную копию / восстановить / удалить некоторые данные в / из SQLite3, но у меня возникла проблема с раздражением.

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

НО, после этого первого раунда (я нажимаю кнопку «домой» и снова строю / отлаживаю), БД по какой-то причине блокируется? Я использую sqlite_exec для выполнения запросов INSERT и DELETE, поэтому человеческая ошибка должна быть минимальной, верно?

Ниже приведен код, который я использую (и да, я знаю, что sql stmt ужасен):

//SAVING
-(void)gemRegIDb:(Registrering *)reg
{
//SAVE REGISTRATION TO DB
sqlite3 *db = [[FotoDokAppDelegate shared] database];
char *err;
NSString *sql = [NSString stringWithFormat:@"INSERT INTO Registrering (regId, imagePath, name, date, sentCount, status,igang, latStr, lngStr, brugerID, projektID, felter, harGPS, tempBilledeNavn) Values('%@','%@','%@','%@','%i','%@','%i','%@','%@','%@','%@','%@','%i','%@');",reg.regId,reg.imagePath,reg.name,reg.date,reg.sentCount,reg.status,reg.igang,reg.latStr,reg.lngStr,reg.brugerID,reg.projektID,reg.felter,reg.harGPS,reg.tempBilledeNavn];
if(sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK)
{
    NSLog(@"Noget gik galt i GEM REGISTRERING TIL DB.");
}
}

//DELETING:
-(void)sletRegFraDb:(Registrering *)reg
{
//DELETE REGISTRATION FORM DB
sqlite3 *db = [[FotoDokAppDelegate shared] database];
char *err;
NSString *sql = [NSString stringWithFormat:@"DELETE FROM Registrering WHERE regId ='%@'",reg.regId];
if(sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK)
{
    NSLog(@"Noget gik galt i SLET REGISTRERING TIL DB.");
}
}

После второго запуска переменная err = = "база данных заблокирована".

РЕДАКТИРОВАТЬ: я думал, что удаление выхода (0); и вставив некоторые sqlite3_close (дБ); в некоторых местах работал, но это не так: (

Поток моей проблемы:

  • Открыть приложение
  • Делать вещи
  • Приложение выполняет резервное копирование данных в БД
  • Приложение отправляет данные на сервер, а затем удаляет из БД.
  • Это работает, но если я убью приложение и снова отладлю, база данных будет заблокирована.
  • Приложение может читать содержимое базы данных, но записи заблокированы.
  • Единственное решение - удалить приложение из симулятора и переустановить его.

Кто-нибудь может мне помочь?

1 Ответ

1 голос
/ 11 июля 2011

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

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