2010-10-01 75 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")) 
    } 
}