2010-10-01 20 views
22

¿Alguien sabe cómo devolver el conteo de una consulta cuando se usa FMDB? Si ejecutoQuery @ "select count (*) from sometable were ..." Obtengo un FMResultSet vacío de nuevo. ¿Cómo puedo obtener el recuento de filas de la consulta? ¿Debo hacer una consulta como "seleccionar * de alguna tabla donde ..." y repetir el conjunto de resultados? ¿O puedo usar useCount o cuál es la mejor manera (en términos de rendimiento) para hacer esto?Pregunta de FMDB SQLite: recuento de filas de una consulta?

Gracias!

Respuesta

87

código corto para llevar a cabo la misma cosa:

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

Asegúrese de incluir el FMDatabaseAdditions.h header file utilizar intForQuery:.

+0

Gracias, eso también funciona, genial :-) – Fuggly

+0

+1 voto para ti einsteinx2 para la versión corta y más dulce. – palaniraja

+0

¡Muchas gracias! : D – Stormer

18

prueba esto. Esto funciona para mi. No se recomienda iterar todos los registros.

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

Puede ser que usted debe verificar su cláusula Where.

+0

¡Perfecto! ¡Gracias! – Fuggly

+0

Genial :) funciona bien –

3

La primera también es correcta pero al usar este método puede recuperar registros y contar usando la misma consulta, sin dolor de cabeza para escribir otra. Simplemente agregue conteo (*) como conteo a su consulta.

Siempre puede ejecutar la declaración de SQL adecuada. Hago algo como:

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

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

la creación de la consulta SQL puede ser más rápido y más barato que la iteración .. creo que los recuentos son baratos.

-4

Si desea saber el recuento de las filas antes de hacer algo con el resultado, incluso puede hacer una consulta simple y solicitar los resultados columnCount que le dan el número de filas y puede guardar una consulta si realmente querer hacer algo con el conjunto de resultados

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

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

Doesn 't columnCount te da el conteo de columnas y no filas? No creo que esta sea una respuesta correcta. –

4

Swift 2 Ejemplo

Este fragmento de código imprimirá el recuento para usted.

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

Si no funcionó, algunas sugerencias:

a) Busque una línea en su proyecto que dice let database = o var database =. Si encuentra uno, cambie db a database
b) ¿Cambió el TABLE_NAME en la instrucción Select a lo que se llame su tabla?

0

Por favor, intente seguir Código, esto funciona para mí

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) 

Usted recibirá Conde de Campo

0

actualizado para Swift 3 cambio menor a "int para la columna"

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