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)
你的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)