2010-10-01 5 views
22

weiß jemand, wie man die Zählung einer Abfrage zurückgibt, wenn FMDB benutzt? Wenn ich executeQuery @ "Select count (*) from someable was ..." Ich bekomme ein leeres FMResultSet zurück. Wie kann ich die Zeilenanzahl der Abfrage abrufen? Muss ich eine Abfrage wie "Select * from Something Where .." durchführen und die Ergebnismenge durchlaufen? Oder kann ich useCount oder was ist der beste Weg (in Bezug auf die Leistung), dies zu tun?FMDB SQLite Frage: Zeilenanzahl einer Abfrage?

Danke!

Antwort

87

Kürzere Code, um das Gleiche zu erreichen:

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

Sicherstellen, dass die FMDatabaseAdditions.h header file zu verwenden intForQuery: aufzunehmen.

+0

Danke, das klappt auch, cool :-) – Fuggly

+0

+1 vote für dich einsteinx2 für die kurze & süssere Version. – palaniraja

+0

Vielen Dank! : D – Stormer

18

versuchen Sie dies. Für mich geht das. Das Iterieren aller Datensätze wird nicht empfohlen.

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

Möglicherweise sollten Sie Ihre Where-Klausel überprüfen.

+0

perfekt! Vielen Dank! – Fuggly

+0

Großartig :) funktioniert gut –

3

Die erste ist auch richtig, aber mit dieser Methode können Sie Datensätze abrufen und zählen mit der gleichen Abfrage, keine Kopfschmerzen, um eine andere zu schreiben. Fügen Sie einfach count (*) als Anzahl zu Ihrer Abfrage hinzu.

Sie könnten immer nur die richtige SQL-Anweisung ausführen. Ich mache etwas wie:

Einrichten der SQL-Abfrage möglicherweise schneller und billiger als Iterieren .. Ich glaube, Zählungen sind billig.

-4

Wenn Sie die Anzahl der Zeilen wissen möchten, bevor Sie etwas mit dem Ergebnis machen, können Sie sogar eine einfache Abfrage durchführen und nach dem Ergebnis columnCount fragen, das Ihnen die Anzahl der Zeilen gibt und Sie können eine Abfrage speichern wollen etwas mit dem resultSet

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

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

Doesn 't columnCount gibt Ihnen die Anzahl der Spalten und nicht der Zeilen? Ich glaube nicht, dass dies eine richtige Antwort ist. –

4

Swift 2 Beispiel

Dieser Code-Schnipsel druckt die Zählung für Sie.

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

Wenn es ein paar Vorschläge nicht funktionieren, haben:

a) in Ihrem Projekt für eine Linie suchen, die let database = oder var database = sagt. Wenn Sie einen finden, ändern Sie db zu database
b) Haben Sie den TABLE_NAME in der Select-Anweisung zu dem geändert, was Ihre Tabelle aufgerufen hat?

0

Bitte versuchen Sie folgenden Code, das funktioniert für mich

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) 

You Will Graf von Feld

0

für Swift 3 geringfügige Änderung "int Für Column" aktualisiert erhalten

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