sqlite3使用NSMutableArray选择

时间:2013-04-01 18:53:38

标签: objective-c sqlite

我想在iOS XCode中使用SQLite3进行选择,如下所示:

//arraycat is the array from which the data comes...multiple selections of a tableview

pros = [arraycat componentsJoinedByString:@","];

const char *sqlselect = "SELECT DISTINCT zuser.zid, zuser.zplz,zuser.zort,zuser.zhofname,zuser.zstrassenr,zuser.zlatitude,zuser.zlongitude FROM zuser,zangebot,zkategorie WHERE zkategorie.zprodukt IN(?) and zangebot.zprodukte=1 and zkategorie.zuser_id=zuser.zid and zangebot.zuser_id=zuser.zid and zkategorie.zdelete_r=0 and zangebot.zdelete_r=0";

if (sqlite3_prepare_v2(database, sqlselect, -1, &selectStmt, NULL) != SQLITE_OK) {
    NSAssert1(0,@"Failed to prepare statement with message '%s'.", sqlite3_errmsg(database));
    NSLog(@"abfrage select produkt hat nicht geklappt");
}

//here has to be the problem... 
sqlite3_bind_text(selectStmt, 1, [pros UTF8String], -1, SQLITE_STATIC);

如果我只是在tableview上选择一个类别然后它可以工作,但如果我选择多个并将它们发送到此语句,那么它不起作用。为什么这个?当我手动编写SQL查询IN(?)中的类别(如('Vegetable','fruits'))时,它也可以工作....为什么不使用componentsJoinedByString方法?

1 个答案:

答案 0 :(得分:1)

在SQL中,参数是占位符for a single value。将字符串绑定到参数时,该参数的值是字符串的内容,而不管这些内容是什么。 换句话说,您的查询可能等同于

SELECT ... WHERE produkt IN ('Vegetable,fruits')

如果要与多个字符串进行比较,则必须使用多个参数创建查询:

SELECT ... WHERE produkt IN (?,?)

并分别绑定所有这些:

sqlite3_bind_text(selectStmt, 1, "Vegetable", -1, SQLITE_STATIC);
sqlite3_bind_text(selectStmt, 2, "fruits", -1, SQLITE_STATIC);