UPDATE не работает с FMDB, работает нормально с командной строкой sqlite

Я использую FMDB для взаимодействия с базой данных SQLite. У меня есть вставка строк нормально, но когда я пытаюсь и ОБНОВИТЬ один из них, ОБНОВЛЕНИЕ не происходит, но об ошибке не сообщается.

Вот что я делаю:

userHistoryDB.logsErrors = YES;
userHistoryDB.traceExecution = YES;
NSString *query = [NSString stringWithFormat:
         @"INSERT OR IGNORE INTO phrase_history (code, %@) VALUES (\"%@\", 0); "
         @"UPDATE OR FAIL phrase_history SET %@ = %@ + 1 WHERE code = \"%@\";",
         countTypeColumn,
         phraseCode,
         countTypeColumn,
         countTypeColumn,
         phraseCode];
BOOL rc = [userHistoryDB executeUpdate:query];

rc - ДА, чтобы указать, что ничего не является неправильным. Вот пример вызова:

<FMDatabase: 0x5303af0> executeUpdate: INSERT OR IGNORE INTO phrase_history (code, presented) VALUES ("grapefruit", 0); UPDATE OR FAIL phrase_history SET presented = presented + 1 WHERE code = "grapefruit";

Что касается FMDB, то это хорошо. Однако запись не увеличивается. Нет ничего плохого в SQL - если я вставлю его в инструмент командной строки sqlite3, он будет работать отлично.

Есть идеи, почему он не работает? Вещи, которые я пытался безрезультатно:

  • Заключение строки в транзакцию
  • Запуск с использованием executeQuery
  • Запуск только обновления (с записью, уже вставленной вручную).
  • Хлопая головой по столу.

2 ответа

Решение

Там есть два оператора sqlite, и FMDB не будет автоматически преобразовывать вашу единственную составную строку в два отдельных оператора. Вам нужно запускать их отдельно, что и делает инструмент командной строки sqlite3.

Где хранится ваша база данных? в комплекте? или в другом месте?

если ваша база данных находится в папке вашего проекта, при компиляции Xcode создаст комплект приложений в build/Debug или build/Release, именно там будет расположена ваша база данных, а не та, которая находится в папке вашего проекта. Проверить, обновлена ​​ли база данных в build/Debug(Release)? База данных в папке вашего проекта не будет обновлена, так как вы можете запросить расположение вашего пакета приложений.

Когда вы проверяли базу данных с помощью командной строки, проверяли ли вы базу данных в пакете проекта или в папках build/Debug(Release)?

Другие вопросы по тегам