2010-10-01 80 views
22

没有人知道如何使用FMDB返回查询的计数?如果我executeQuery @“selecttable(*)from sometable ...”我得到一个空的FMResultSet回来。我怎样才能得到查询的行数?我是否需要执行查询,如“select * from sometable where ..”并遍历结果集?或者我可以使用useCount或最好的方式(就性能而言)来做到这一点?FMDB SQLite问题:查询的行数?

谢谢!

回答

87

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

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

确保包括FMDatabaseAdditions.h header file使用intForQuery:

+0

谢谢,这也适用于,酷:-) – Fuggly 2010-12-03 12:06:48

+0

+1投票给你einsteinx2的短和更甜的版本。 – palaniraja 2010-12-05 16:22:13

+0

非常感谢! :D – Stormer 2014-08-12 14:42:01

18

试试这个。这个对我有用。不建议重复所有记录。

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

可能是你应该检查你的Where子句。

+0

完善!谢谢! – Fuggly 2010-11-29 09:41:15

+0

伟大:)工作正常 – 2013-02-27 11:20:04

3

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

你总是可以运行正确的SQL语句。我做类似的东西:

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

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

设置SQL查询可能会更快,更便宜,然后迭代..我相信计数很便宜。

-4

如果你想知道结果之前的行数,你甚至可以做一个简单的查询,并要求结果columnCount给你的行数,如果你真的可以保存一个查询想做出点与ResultSet中

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

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

Doesn 'columnCount给你列的数量而不是行数?我不相信这是一个正确的答案。 – 2015-03-19 15:27:56

4

斯威夫特2例

该代码段将打印计数为您服务。

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

如果没有工作,提出几点建议:

一)请在您的项目,说:let database =var database =线。如果你找到一个,然后更改dbdatabase
b)您是否将Select语句中的TABLE_NAME更改为您的表被调用的任何内容?

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) 

你会得到场

计数
0

更新的斯威夫特3小的改动,以 “int对于列”

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