sqlite3 вставьте или замените проблему синтаксиса в приложении iPhone - PullRequest
0 голосов
/ 26 ноября 2011

Я получаю сообщение об ошибке в синтаксисе вставки или замены sqlite3;

Мое приложение аварийно завершает работу и не может войти в условие оператора prepare_v2.Мой код выглядит следующим образом:

NSString *plquery = @"INSERT OR REPLACE INTO LIST (COUNT, NAME, DATE, IDNUM) VALUES (?, ?, ?, ?) WHERE IDNUM = '";
NSString *update = [plquery stringByAppendingFormat:@"%i%@",[accessID integerValue],@"'"];
NSLog(@"%@",update);

sqlite3_stmt *stmt;
if (sqlite3_prepare_v2(database, [update UTF8String], -1, &stmt, nil)== SQLITE_OK)
{
    NSLog(@"reaches here");
    sqlite3_bind_int(stmt, 1, i);
}
if (sqlite3_step(stmt) != SQLITE_DONE)
NSAssert1(0, @"Error updating table: %s", errorMsg); 

1 Ответ

6 голосов
/ 26 ноября 2011

Вы не можете вставить и где в том же заявлении. У вас есть 3 варианта:

  1. замените 'вставить или заменить' на 'обновить', если вы хотите изменить уже существующие строки.
  2. удалить инструкцию where для добавления новых строк.
  3. если вы не уверены, что строка уже существует, сначала выполните оператор 'select', а затем выполните if else с двумя вышеуказанными параметрами.

вариант 1 будет выглядеть так:

 NSString * update = [NSString stringWithFormat:@"UPDATE LIST SET COUNT = ?, NAME = ?, DATE = ?, IDNUM = ? WHERE IDNUM = '%i'", [accesID integerValue]];

вариант 2 будет выглядеть так:

NSString * update = [NSString stringWithFormat:@"INSERT OR REPLACE INTO LIST (COUNT, NAME, DATE, IDNUM) VALUES (?, ?, ?, ?)"];

вариант 3 будет выглядеть так:

NSString * update = [NSString stringWithFormat:@"SELECT * FROM LIST WHERE IDNUM = '%i'", [accessID integerValue]];
sqlite3_stmt *stmt;
int rc = sqlite3_prepare_v2(db, [update UTF8String], -1, &stmt, nil);
if (rc == SQLITE_OK) {
    if (sqlite3_step(stmt) == SQLITE_ROW) {
        update = [NSString stringWithFormat:@"UPDATE LIST SET COUNT = ?, NAME = ?, DATE = ?, IDNUM = ? WHERE IDNUM = '%i'", [accessID integerValue]];
    }
    else{
        update = [NSString stringWithFormat:@"INSERT OR REPLACE INTO LIST (COUNT, NAME, DATE, IDNUM) VALUES (?, ?, ?, ?)"];   
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...