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.
Código más corto para lograr lo mismo:
NSUInteger count = [db intForQuery:@"SELECT COUNT(field) FROM table_name"];
Asegúrese de incluir el archivo de encabezado FMDatabaseAdditions.h
para usar intForQuery:
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"))
}
}