INSERT OR REPLACE не обновляет запись в SQLITE - PullRequest
0 голосов
/ 21 июня 2011

Я пытаюсь вставить запись в базу данных, и всякий раз, когда я делаю это, она дважды вставляет запись в базу данных.Я использую следующий запрос для выполнения вставки:

-(void) insert {
      NSString *sqlQuery = [NSString stringWithFormat:@"INSERT OR REPLACE INTO test(ID,KEY ) VALUES ('%d','%@');", test.id, test.key];
      const char *insert_sql = [sqlQuery UTF8String];
      sqlite3_exec(db, insert_sql, NULL, NULL, NULL);
}

Он всегда вводит повторяющиеся записи всякий раз, когда я запускаю этот запрос.Есть ли способ проверить, если данные уже существуют, не вставляйте просто обновить.

Ответы [ 2 ]

3 голосов
/ 21 июня 2011

Вы инициализируете строку SQL, используя stringWithFormat:, но передаваемая вами строка не является строкой формата.Параметры ? распознаются только анализатором sqlite.

Это можно исправить, заменив строку SQL на

// Assuming id is an int and key is a string
NSString *sqlQuery = [NSString stringWithFormat:@"INSERT OR REPLACE INTO test(ID,KEY ) VALUES (%d,%@);", test.id, test.key];

Или вам нужно вызвать функции подготовки / связывания sqliteпривязать параметры к групповым символам.Для этого см. Документацию prepare и bind .

Я предлагаю второй способ, так как это предотвращает внедрение SQL.

1 голос
/ 21 июня 2011

Является ли ID первичным ключом для таблицы или иным образом индексируется?Он должен быть уникальным для замены.

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