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)?