FMDB SQLite问题:查询的行数?

时间:2010-10-01 08:13:57

标签: iphone objective-c sqlite fmdb

有没有人知道如何在使用FMDB时返回查询计数?如果我执行Query @“selecttable(*)from sometable是......”我得到一个空的FMResultSet。如何获取查询的行数?我是否需要执行诸如“select * from sometable where ..”之类的查询并迭代结果集?或者我可以使用useCount或最好的方法(在性能方面)来做到这一点吗?

谢谢!

8 个答案:

答案 0 :(得分:88)

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

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

请务必加入FMDatabaseAdditions.h header file以使用intForQuery:

答案 1 :(得分:20)

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

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

您可以检查您的Where子句。

答案 2 :(得分:4)

Swift 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 =var database =的行。如果找到,则将db更改为database
b)您是否将Select语句中的TABLE_NAME更改为调用表的任何内容?

答案 3 :(得分:3)

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

您可以随时运行正确的SQL语句。我做了类似的事情:

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

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

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

答案 4 :(得分: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"))
    }
}

答案 5 :(得分: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)

你将获得Field of Count

答案 6 :(得分:0)

已针对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"))
    }
}

答案 7 :(得分:-5)

如果你想在得到结果之前知道行的数量,你甚至可以做一个简单的查询并询问结果columnCount,它给你行数,你可以保存一个查询,如果你真的想要使用resultSet创建一些东西

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

while ([results next]){
... do your stuff ...
}