如何在 FMResultSet 中传递两个查询

Posted

技术标签:

【中文标题】如何在 FMResultSet 中传递两个查询【英文标题】:How to pass two queries in FMResultSet 【发布时间】:2014-08-03 07:34:20 【问题描述】:

我已经写了这段代码:-

[database open];

    NSString *stringQuery = [NSString stringWithFormat:@"SELECT email, firstName, id, lastName, phone FROM contacts WHERE id = '%@'", _stringID];

    NSString *stringQuery2 = [NSString stringWithFormat:@"SELECT id, status FROM members WHERE id = '%@'", _stringID];

    FMResultSet *result = [AppDel.database executeQueryWithFormat:stringQuery, stringQuery2];

    if ([result next])
    
        labelEmail.text = [result stringForColumn:@"email"];
        labelFirstName.text = [result stringForColumn:@"firstName"];
        labelLastName.text = [result stringForColumn:@"lastName"];
        labelCellPhone.text = [result stringForColumn:@"phone"];

        labelSignInStatus.text = [result stringForColumn:@"status"];
    

    [result close];

    [database close];

当我通过 labelSignInStatus.text 传递它时,它给了我 labelCellPhone.text 的值,它们显示“警告:我找不到名为 'status' 的列”&当我在 Sqlite 浏览器中传递查询时,它们给了我正确的结果.我还创建了 FMResultSet 对象,再次命名为 FMResultSet *result1 并通过查询它向我显示了同样的错误。 任何人都可以帮助我。 谢谢

【问题讨论】:

【参考方案1】:

您不能将 2 个查询传递给 executeQueryWithFormat。这不是它的本意。您可以传递一个查询,然后传递一些参数。如果你要自己格式化sql,那么就用executeQuery:(NSString *) sql

您在此处尝试执行的操作并不完全清楚,但您可能需要执行 SQL 连接。所以你的问题是一个 SQL 问题,而不是我认为的 FMResult 集问题。

也许你需要这样的东西:

NSString *stringQuery = [NSString stringWithFormat:@"SELECT c.email, c.firstName, c.id, m.status c.lastName, c.phone FROM contacts c, members m where c.id=m.id and c.id='%@'", _stringID];

FMResultSet *result = [AppDel.database executeQuery:stringQuery];

这样会返回一行,其中联系人与成员具有相同的 id。然后你的其余代码应该可以工作了。

【讨论】:

感谢 Fraggle。您能否让我知道如何通过 FMDatabase 获取所有行数据,因为我使用了 stringForColumn 但它们只返回一个值。我想要整个结果,当我在 sqlite 浏览器上执行查询时,它会给出 50 个名称及其对应的数字,但在应用程序中只返回 1 个值。

以上是关于如何在 FMResultSet 中传递两个查询的主要内容,如果未能解决你的问题,请参考以下文章

如何在解析函数 GraphQL 中传递两个查询?

如何在 Swift FMDB 中使用 executeQuery() 执行基于条件的查询

如何从单个数组中的两个查询中传递 json

将 FMResultSet 转换为 NSMutableArray?

如何在 AsyncTask 中传递两个参数?

如何在mvc中传递具有2个值的查询字符串