ios FMDB SELECT NOT IN (?)

Posted

技术标签:

【中文标题】ios FMDB SELECT NOT IN (?)【英文标题】: 【发布时间】:2014-11-14 07:59:00 【问题描述】:

我想检查一个 id 列表是否在数据库中。 这是我的代码...

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

这是行不通的。只有当数组只有一个数字时才有效。

有人知道如何使用 FMDB 进行 SELECT NOT IN 吗?

谢谢!

【问题讨论】:

【参考方案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];

编辑:

根据您在 cmets 中提供的信息,我确实发现 sqlite 在您提供数组组件中的多个项目时无法编译字符串文字。我修改答案仍然是从您的角度来测试它是否有效?发表评论以获得确认。

【讨论】:

我已经测试过了。它在我身边工作。你有什么问题? 抱歉,我发现您的代码确实有效。但我数组中的对象实际上就像@“54633a47b51ed30aa5f6891e”。控制台显示“无法识别的令牌:“54656cdca7bc96aac023e6a3”。你知道这是为什么吗? 我猜id 表中的字段是INTEGER。这是数组中的字符串值。你可以使用其他字段来存储数组值吗? 表中id字段为TEXT~~~ 我明白了。因为这里的sqlite 无法识别字符串文字。我将为您提供编辑后的答案

以上是关于ios FMDB SELECT NOT IN (?)的主要内容,如果未能解决你的问题,请参考以下文章

iOS:FMDB 问题向数组添加大量数据

IOS FMDB模糊查询

初学者 FMDB iOS 数据库、表创建

如何在 FMDB 查询 iOS Swift 4 中使用 Like with Text?

在mybatis的@Select中用not in 时

DELETE with NOT IN (SELECT ...) 的性能