FMDB - 使用值数组选择语句

Cra*_*ose 1 arrays sqlite select objective-c fmdb

数组(arrayBottleID3)具有可变数量的INT值.我想返回(results/arrayBottleNames)来返回结果.

arrayBottleID3可能有3个INT值,我不想做3个不同的查询语句.我不知道arrayBottleID3有多少值或多少.

arrayBottleID3可以有1或100个INT值.

以下不起作用.我得到错误或它没有返回任何东西.

我只是不知道使用withArugmentsInArray的确切语法是什么.我知道它不是.. bottleID =?或者bottleID(?).

有人可以给我看一个例子吗?

[self OpenDB]    


 results = [database executeQuery:@"SELECT friendlyname FROM Inventory WHERE bottleID = ?" withArgumentsInArray:@[arrayBottleID3]];

while([results next])
{
    [arrayBottleNames addObject:[results stringForColumn:@"friendlyname"]];

}

[database close];

NSLog(@"count %d", [arrayBottleNames count]);
NSLog(@"Names: %@",arrayBottleNames);
Run Code Online (Sandbox Code Playgroud)

Hol*_*lly 5

你的SQL应该是:

SELECT friendlyname FROM Inventory WHERE bottleID IN (?, ?, ?)
Run Code Online (Sandbox Code Playgroud)

?对于数组中的每个元素,您将需要1 ,因此您应该执行以下操作:

NSMutableArray *placeHolders = [NSMutableArray arrayWithCapacity:[sourceArray count]];
for (int i=0; i<[sourceArray count]; i++) {
    [placeHolders addObject:@"?"];
}
NSString *placeHolderString = [placeHolders componentsJoinedByString:@", "];

NSString *query = [NSString stringWithFormat:@"SELECT * FROM MyTable WHERE myField IN (%@)", placeHolderString];
FMResultSet *rs = [db executeQuery:query withArgumentsInArray:sourceArray];
Run Code Online (Sandbox Code Playgroud)