SQLite UPDATE语句的初学者问题

时间:2011-06-23 02:24:09

标签: iphone sqlite

****请标记为不必要 - 问题不再与答案有关。****

我需要帮助更改SQLite数据库中的单个“单元格”。它是0,它需要是1.(是的,我使用整数作为bools)。我相信问题在于更新。

+ favStmt设置为nil。

+ 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);

}

我发现了一个类似的问题,但我无法理解我的目的。 Changing a value in SQLite3

谢谢你!

对于那些只说masochists使用直接SQLite的人,有两件事。一,是的,我是一个受虐狂。第二,我只需要最后一个语句,我应该使用直接SQLite。

1 个答案:

答案 0 :(得分:1)

这是一个真正的答案,或者至少是一个更好的答案。

您的sqlite3_prepare_v2sqlite3_bind_intsqlite3_stepsqlite3_reset序列看起来是正确的,但我认为您给的是sqlite3_bind_int错误的参数。 sqlite3_bind_int的论据应该是:

  1. 声明句柄。
  2. 索引从一开始设置的SQL参数的索引。
  3. 要绑定的值。
  4. 所以我认为你的绑定应该是这样的:

    sqlite3_bind_int(favStmt, 1, 4);
    

    并且没有理由为偶尔使用低级接口道歉,有时候知道在所有常见的欢乐之下发生了什么是有用的。只是不要养成尝试用汇编程序编写所有东西的习惯,这样说:)