Objective c FMDB-使用值数组的Select语句

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

数组arrayBottleID3具有数量可变的INT值。我想返回results/arrayBottleNames以返回结果

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

arrayBottleID3可以有1或100个整数值

下面的代码不起作用。我收到错误,或者它没有返回任何内容

我只是不知道使用ArgmentSinArray的确切语法是什么。 我知道不是。。瓶号=?或者瓶装水

谁能给我举个例子吗

[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替换为您自己的