【问题标题】:ios FMDB SELECT NOT IN (?)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 吗?

谢谢!

【问题讨论】:

    标签: ios select 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];
    

    编辑:

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

    【讨论】:

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