代码之家  ›  专栏  ›  技术社区  ›  Glenn

调试sqlite

  •  3
  • Glenn  · 技术社区  · 14 年前

    运行此查询:

    SELECT * 
    FROM shows, locations 
    WHERE (shows.day_id = 1) 
      AND (shows.id IN (6,7,15,19,23,66)) 
      AND (shows.location_id = locations.id)
    ORDER by locations.sort_order
    

    在SQLite管理器和代码中运行得非常完美,当我完全这样输入它时。但是,如果执行参数替换,查询将不返回任何结果。。。

    if (sqlite3_open([databasePath UTF8String],&showsDatabase) == SQLITE_OK){
        const char *sqlStatement = "SELECT * FROM shows, locations WHERE (shows.day_id = ?) AND (shows.id IN (?)) AND (shows.location_id = locations.id) ORDER by locations.sort_order";
            sqlite3_stmt *showStatement;
            if(sqlite3_prepare_v2(showsDatabase, sqlStatement, -1, &showStatement, NULL) == SQLITE_OK) {
                sqlite3_bind_int(showStatement, 1, forDay);
                sqlite3_bind_text(showStatement, 2, allFavorites,-1,NULL);
                int error = sqlite3_step(showStatement);
                while(sqlite3_step(showStatement) == SQLITE_ROW) {
    

    ...

    问题一定出在in(6,7…)部分,如果没有这个部分,它就工作得很完美。

    但是error=101=sqlite3\u step()已完成执行=找不到行

    1 回复  |  直到 9 年前
        1
  •  1
  •   Mark Byers    14 年前

    你不能束缚 IN (?) 使用数组。

    shows.id IN (?, ?, ?, ?, ?, ?) 并分别绑定每个参数。问号的数量还必须与参数的数量相匹配,因此如果参数的数量可能有所不同,则可能需要动态构造查询。

    推荐文章