UPDATE не работает с FMDB, работает нормально с командной строкой sqlite - PullRequest
0 голосов
/ 18 ноября 2010

Я использую 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 ]

3 голосов
/ 22 ноября 2010

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

0 голосов
/ 30 ноября 2010

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

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

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

...