2014-11-14 5 views
1

Я хотел бы проверить, есть ли в базе данных список идентификаторов. Вот мой код ...ios FMDB SELECT NOT IN (?)

NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",nil]; 
NSString *string = [array componentsJoinedByString:@","]; 
FMResultSet * rs = [self.db executeQuery:@"SELECT id FROM FriendList WHERE id NOT IN (?)",string]; 

Это не работает. Это работает только в том случае, если массив имеет только один номер.

Кто-нибудь знает, как сделать SELECT NOT IN, используя FMDB?

Спасибо!

ответ

1

Здесь вам не нужна небольшая модификация.

Следуйте нижеприведенному коду.

NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",nil]; 
NSString *components = [array componentsJoinedByString:@", "]; 


NSMutableString *valueString = [NSMutableString new]; 

NSMutableString *fieldString = [NSMutableString new]; 

[fieldString appendString:@"SELECT id FROM FriendList WHERE id NOT IN ("]; 

for (NSString *fielValue in array) { 
    [fieldString appendString:@"?,"]; 
    [valueString appendString:fielValue]; 
} 

[fieldString replaceCharactersInRange:NSMakeRange([fieldString length] - 1, 1) withString:@")"]; 
NSString *normalString = [NSString stringWithString:fieldString]; 
fieldString = nil; 

FMResultSet * rs = [self.db executeQuery:@"%@", normalString, components]; 

EDIT:

Из информации, которую вы мне в комментариях, я выяснить, что sqlite не может скомпилировать строкового литерала в то время как вы предоставите несколько элементов из компонентов массива. Я изменяю ответ все еще, это с вашего конца, чтобы проверить, что он работает или нет? Оставьте комментарий для подтверждения.

+0

Это не работает – Jenny

+0

Я протестировал его. Он работает на моей стороне. Какие у вас проблемы? – Kampai

+0

Извините, я обнаружил, что ваш код действительно работает. Но объект в моем массиве на самом деле похож на @ "54633a47b51ed30aa5f6891e". Консоль показывает "непризнанный токен:" 54656cdca7bc96aac023e6a3 "". Вы знаете, почему? – Jenny

Смежные вопросы