Проблема новичка с оператором SQLite UPDATE - PullRequest
1 голос
/ 23 июня 2011

**** Пожалуйста, отметьте как ненужный - вопрос больше не относится к ответу. ****

Мне нужна помощь в изменении одной "ячейки" в базе данных SQLite. Это 0, оно должно быть 1. (Да, я использую int как bools). Я считаю, что проблема в обновлении.

+ favStmt установлен в ноль ранее.

+ gameID - это столбец первичного ключа.

+ useGameID передает первичный ключ для строки, которую я хочу обновить.

+ isFavorite - это столбец, который я хочу обновить.

- (void) addFavorite:(NSInteger) useGameID{


if(favStmt==nil){
    const char *sql = "update GameTable Set isFavorite = ? Where gameID=?";
    if(sqlite3_prepare_v2(database, sql, -1, &favStmt, NULL) !=SQLITE_OK)
        NSAssert1(0,@"Error while creating favorite stmt. '%s'", sqlite3_errmsg(database));

}
sqlite3_bind_int(favStmt, 1, 1);
sqlite3_bind_int(favStmt, 2, useGameID);

if (SQLITE_DONE != sqlite3_step(favStmt))
    NSAssert1(0, @"Error while favoriting. '%s'", sqlite3_errmsg(database));


sqlite3_reset(favStmt);

}

Я нашел похожий вопрос, но не смог понять его для своих целей. Изменение значения в SQLite3

Спасибо за все!

А для тех, кто говорит, что только мазохисты используют прямой SQLite, две вещи. Во-первых, да, я мазохист. Во-вторых, мне нужно только это последнее утверждение, и я должен выполнить прямой SQLite.

1 Ответ

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

Вот реальный ответ или, по крайней мере, лучший.

Ваша sqlite3_prepare_v2, sqlite3_bind_int, sqlite3_step, sqlite3_reset последовательность выглядит правильно, но я думаю, что вы Даем sqlite3_bind_int неправильные аргументы. Аргументы для sqlite3_bind_int должны быть:

  1. Дескриптор оператора.
  2. Индекс параметра SQL, который нужно установить, когда индексы начинаются с единицы.
  3. Значение для привязки.

Так что я думаю, что ваша привязка должна выглядеть так:

sqlite3_bind_int(favStmt, 1, 4);

И нет никаких причин извиняться за то, что иногда используете низкоуровневые интерфейсы, полезно знать, что иногда происходит под всеми обычными шутками. Только не пытайтесь писать все на ассемблере, так сказать:)

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