25

有谁知道使用 FMDB 时如何返回查询计数?如果我执行Query @"select count(*) from sometable are..." 我会得到一个空的 FMResultSet。如何获取查询的行数?我是否需要执行类似“select * from sometable where..”之类的查询并遍历结果集?或者我可以使用 useCount 还是最好的方法(就性能而言)来做到这一点?

谢谢!

4

8 回答 8

90

更短的代码来完成同样的事情:

NSUInteger count = [db intForQuery:@"SELECT COUNT(field) FROM table_name"];

确保包含要使用的FMDatabaseAdditions.h头文件intForQuery:

于 2010-12-01T00:18:12.810 回答
22

试试这个。这个对我有用。不建议迭代所有记录。

FMResultSet *rs = [db executeQuery:@"select count(FIELD) as cnt from TABLENAME"];
while ([rs next]) {
    NSLog(@"Total Records :%d", [rs intForColumn:@"cnt"]);
}

也许你应该检查你的 Where 子句。

于 2010-11-22T18:16:09.537 回答
5

斯威夫特 2 示例

此代码段将为您打印计数。

if let rs = db.executeQuery("SELECT COUNT(*) as Count FROM TABLE_NAME", withArgumentsInArray: nil) {
    while rs.next() {
        print("Total Records:", rs.intForColumn("Count"))
    }
}

如果还不行,有几点建议:

a) 在你的项目中寻找一行写着let database =or的行var database =。如果找到,则更db改为database
b) 您是否将 Select 语句中的 TABLE_NAME 更改为您的表的名称?

于 2016-01-20T16:17:03.570 回答
3

第一个也是正确的,但是通过使用这种方法,您可以使用相同的查询来检索记录和计数,编写另一个不头疼。只需将 count(*) 作为计数添加到您的查询中。

您总是可以只运行正确的 SQL 语句。我做类似的事情:

FMResultSet *rs = [database executeQuery:@"select count(*) as count from words"];
[rs next];

wordsThatExist = [rs intForColumn:@"count"];

设置 SQL 查询可能比迭代更快、更便宜。我相信计数很便宜。

于 2013-12-20T04:45:00.883 回答
1

为 Swift 3 更新了对“int For Column”的小改动

if let rs = db.executeQuery("SELECT COUNT(*) as Count FROM TABLE_NAME", withArgumentsInArray: nil) {
while rs.next() {
    print("Total Records:", rs.int(forColumn: "Count"))
    }
}
于 2017-02-07T14:09:53.067 回答
1

为 Swift 4 更新了方法参数名称的微小变化

if let rs = db.executeQuery("SELECT COUNT(*) as Count FROM TABLE_NAME", withArgumentsIn: nil) {
while rs.next() {
    print("Total Records:", rs.int(forColumn: "Count"))
    }
}
于 2018-12-20T20:34:49.167 回答
0

请尝试以下代码,这对我有用

let objManager = ModelManager.getInstance()

objManager.database?.open()

let resultSet1: FMResultSet! = sharedInstance.database!.executeQuery("SELECT COUNT(Field) FROM TableName”, withArgumentsInArray:nil)

        if (resultSet1 != nil)
        {
            while resultSet1.next()
            {
              countRecord = Int(resultSet1.intForColumn("COUNT(Field)"))
            }

        }

     print(countRecord)

您将获得字段计数

于 2016-07-07T13:34:42.140 回答
-5

如果您想在对结果进行操作之前知道行数,您甚至可以执行一个简单的查询并询问结果 columnCount 为您提供行数,如果您真的想做某事,您可以保存一个查询与结果集

FMResultSet *results = [database executeQuery:@"SELECT * from tableName"];
int numberOfRows = [results columnCount];

while ([results next]){
... do your stuff ...
}
于 2015-01-08T09:58:51.153 回答