Последний столбец отображается дважды в базе данных sqlite - PullRequest
0 голосов
/ 04 августа 2011

Я хотел заменить девять объектов в моей базе данных sqlite, но последний столбец появляется дважды.Что мне нужно сделать, чтобы переносились только мои девять объектов, а не один дополнительный?

for (NSInteger i = 0; i <9; i++) {
    NSString * checkNSString = [checklistLevel objectAtIndex:i];

    NSString * SkillLevelNSString = [SkillLevel objectAtIndex:i];

    sqlite3 *database;
    if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {   



        char *errorMsg;
        char *replace = "REPLACE Into SkillLevel4 (rowid, CheckboxSkillLevel4, SkillLevel4) Values (?,?,?);";

        sqlite3_stmt *stmt;
        if (sqlite3_prepare_v2(database, replace , -1, &stmt, nil)
            == SQLITE_OK) {
            sqlite3_bind_int(stmt, 1, i);   
            sqlite3_bind_text(stmt, 2, [checkNSString UTF8String], -1, SQLITE_TRANSIENT);
            sqlite3_bind_text(stmt, 3, [SkillLevelNSString UTF8String], -1, SQLITE_TRANSIENT);

            if (sqlite3_step(stmt) != SQLITE_DONE)
                NSAssert1(0, @"Error updating table: %s", errorMsg);
            sqlite3_finalize(stmt);
        }   
        }
        sqlite3_close(database);


}

База данных:

  "0"   "1" "demonstrate 4 types of mounts"
  "1"   "1" "ride backward for 10 meters"
  "2"   "0" "ride one footed for 10 meters"
  "3"   "0" "idle with left foot down 25 times"
  "4"   "0" "idle with right foot down 25 times"
  "5"   "1" "ride with seat out in front for 10 meters"
  "6"   "1" "ride with the seat out in back for 10 meters"
  "7"   "1" "make a 360 degree turn to the left inside a 1 meter circle"
  "8"   "0" "make a 360 degree turn to the right inside a 1 meter circle "
  "9"   "0" "make a 360 degree turn to the right inside a 1 meter circle " <-twice

1 Ответ

1 голос
/ 04 августа 2011

Была ли добавлена ​​какая-либо строка, поскольку она не существует в таблице? SQLite "ВСТАВИТЬ ИЛИ ЗАМЕНИТЬ" против "ОБНОВЛЕНИЕ ... ГДЕ" .

Более того, вы должны изменить свой код следующим образом:

  1. Откройтебаза данных
  2. Если все в порядке, подготовьте оператор
  3. Если все в порядке, запустите цикл, свяжите значения с подготовленным оператором.sqlite3_reset () оператор в конце каждой итерации
  4. Завершить цикл, завершить оператор, закрыть базу данных.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...