2009-11-08 21 views
7

Estoy usando fmdb para administrar mi base de datos. No pude encontrar ningún ejemplo para eliminar una fila de una tabla en fmdb. Probé¿Cómo eliminar una fila en una tabla de base de datos sqlite?

NSString *[email protected]"DELETE from tableName WHERE id=3";  
    FMResultSet *rs = [database executeQuery:sqlStat]; 

pero no su trabajo, porque cuando he comprobado el número total de entradas en la tabla, estoy consiguiendo el mismo número que antes de ejecutar la declaración anterior. Entonces, ¿cuál es la forma correcta de eliminar una fila de una tabla usando fmdb?

+0

¿Cómo se determina el número de entradas en la tabla? –

+0

Por ejemplo, estoy haciendo FMResultSet * rs = [database executeQuery: @ "select * from tableName"]; y luego almacenar el resultado en NSMutableArray. – MAX

Respuesta

12

FMDB puede ser un poco quisquilloso si no pasa el objeto como un NSNumber. Esta es la forma admitida y segura de formatear las consultas.

[db executeUpdate:@"DELETE FROM theTable WHERE id = ?", [NSNumber numberWithInt:myObject.id]]; 
+0

¡Fantástico! ¡Esto resolvió mi problema! – Jon

11

Debe reemplazar:

... [executeQuery base de datos: sqlStat] ...

con:

... [executeUpdate base de datos: sqlStat];

Además, trate de añadir:

[database beginTransaction]; 

antes de su bloque ABM, y:

[database commit]; 

después de ejecutarse/borrar operación de actualización/inserción.

;)

+0

No estoy seguro si esto ayudaría a alguien más pero estoy usando sqlite3 desde la línea de comandos y emití un 'BEGIN TRANSACTION;' before y 'COMMIT;' después de ejecutar mi declaración 'DELETE'. La primera vez que uso CLI y esto es lo que funcionó para mí. Gracias por el consejo, @Florin. – harperville

+0

np, @harperville :) – Florin

+0

Trabajó con [database executeUpdate: sqlStat], donde sqlStat es "DELETE" – kokemomuke

1

i también corrió en el mismo síntoma. y mi problema era ni me llamada (y causado "sin memoria" error)

[db open]; 

asegúrese de hacer esto para depurar problemas de su FMDB db.traceExecution = SI; db.logsErrors = YES;

0

que necesita para asegurar que todos los procesos

NSString *query = @"delete from places where published = 1"; 
const char *sqlStatement = [query UTF8String]; 
sqlite3_stmt *compiledStatement; 
if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) { 
    // Loop through the results and add them to the feeds array 
    while(sqlite3_step(compiledStatement) == SQLITE_ROW) { 
     // Read the data from the result row 
     NSLog(@"result is here"); 
    } 

    // Release the compiled statement from memory 
    sqlite3_finalize(compiledStatement); 

} 
int numberOfEffectedRow = sqlite3_changes(database); 
return numberOfEffectedRow; // get number of effected rows 
Cuestiones relacionadas