iphone objective-c sqlite fmdb

iphone - Pregunta de FMDB SQLite: conteo de filas de una consulta?



sqlite ios (7)

¿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?

¡Gracias!


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 deba verificar su cláusula Where.



El primero también es correcto, pero al usar este método puedes recuperar registros y contar usando la misma consulta, sin dolor de cabeza para escribir otro. Simplemente agregue conteo (*) como conteo a su consulta.

Siempre puedes ejecutar la declaración SQL correcta. Yo hago algo como:

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

La configuración de la consulta SQL puede ser más rápida y económica que iterar. Creo que los recuentos son baratos.


Si quieres saber el recuento de las filas antes de hacer algo con el resultado, incluso puedes hacer una consulta simple y pedir los resultados columnCount que te dan el número de filas y puedes guardar una consulta si realmente quieres hacer algo con el resultado

FMResultSet *results = [database executeQuery:@"SELECT * from tableName"]; int numberOfRows = [results columnCount]; while ([results next]){ ... do your stuff ... }


Ejemplo de Swift 2

Este fragmento de código imprimirá el conteo por 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 diga let database = o var database = . Si encuentra uno, cambie db a la database de database
b) ¿Cambió TABLE_NAME en la declaración Select a lo que se llame su tabla?


Intenta seguir el 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)

Obtendrás el Conteo del Campo


actualizado para Swift 3 cambio menor a "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")) } }