2014-01-23 4 views
1

배열 (arrayBottleID3)의 INT 값은 가변적입니다. 결과 (result/arrayBottleNames)를 반환하여 결과를 반환하고 싶습니다.FMDB - 값 배열을 사용하여 Select 문

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); 

답변

5

당신의 SQL은 다음과 같아야합니다 다음 내가 사용

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]; 
+0

정말 고마워요. 이것은 완벽하게 작동했습니다. – CrazyGoose

1

:이 같은 뭔가해야하므로

SELECT friendlyname FROM Inventory WHERE bottleID IN (?, ?, ?) 

당신은 배열의 각 요소에 대해 1 ?가 필요합니다 ?,?,?,? ... 문자열을 만들려면 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을 자신의 것으로 바꿉니다.