Objective c FMDB-使用值数组的Select语句
数组arrayBottleID3具有数量可变的INT值。我想返回results/arrayBottleNames以返回结果 arrayBottleID3可能有3个INT值,我不想做3个不同的查询语句。我不知道arrayBottleID3有多少个值 arrayBottleID3可以有1或100个整数值 下面的代码不起作用。我收到错误,或者它没有返回任何内容 我只是不知道使用ArgmentSinArray的确切语法是什么。 我知道不是。。瓶号=?或者瓶装水 谁能给我举个例子吗Objective c FMDB-使用值数组的Select语句,objective-c,arrays,sqlite,select,fmdb,Objective C,Arrays,Sqlite,Select,Fmdb,数组arrayBottleID3具有数量可变的INT值。我想返回results/arrayBottleNames以返回结果 arrayBottleID3可能有3个INT值,我不想做3个不同的查询语句。我不知道arrayBottleID3有多少个值 arrayBottleID3可以有1或100个整数值 下面的代码不起作用。我收到错误,或者它没有返回任何内容 我只是不知道使用ArgmentSinArray的确切语法是什么。 我知道不是。。瓶号=?或者瓶装水 谁能给我举个例子吗 [self OpenD
[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);
您的SQL应该是:
SELECT friendlyname FROM Inventory WHERE bottleID IN (?, ?, ?)
你需要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];
您的SQL应该是:
SELECT friendlyname FROM Inventory WHERE bottleID IN (?, ?, ?)
你需要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];
我在Swift中使用以下方法创建?、?、?、?,?,?,?。。。字符串:
let bindStr = join(",", Array(count: sourceArray.count, repeatedValue: "?"))
if let rs = db.executeQuery("SELECT * FROM MyTable WHERE myField IN (\(bindStr))", withArgumentsInArray: sourceArray) { ... handle result set... }
只需将sourceArray替换为您自己的。我在Swift中使用以下方法创建?、?、?、?,?,?,?。。。字符串:
let bindStr = join(",", Array(count: sourceArray.count, repeatedValue: "?"))
if let rs = db.executeQuery("SELECT * FROM MyTable WHERE myField IN (\(bindStr))", withArgumentsInArray: sourceArray) { ... handle result set... }
只需将sourceArray替换为您自己的