Как удалить строку в таблице базы данных sqlite?
Я использую fmdb для управления моей базой данных. Я не смог найти ни одного примера для удаления строки из таблицы в fmdb. Я старался
NSString *sqlStat=@"DELETE from tableName WHERE id=3";
FMResultSet *rs = [database executeQuery:sqlStat];
но это не работает, потому что, когда я проверил общее количество записей в таблице, я получаю то же число, что и до выполнения вышеприведенного оператора. Итак, как правильно удалить строку из таблицы с помощью fmdb?
4 ответа
FMDB может быть немного привередливым, если вы не передадите объект как NSNumber. Это поддерживаемый и безопасный способ форматирования запросов.
[db executeUpdate:@"DELETE FROM theTable WHERE id = ?", [NSNumber numberWithInt:myObject.id]];
Вы должны заменить:
... [база данных executeQuery:sqlStat] ...
с:
... [database executeUpdate: sqlStat];
Также попробуйте добавить:
[database beginTransaction];
перед вашим блоком CRUD, и:
[database commit];
после выполнения операции обновления / удаления / вставки.
;)
Я также столкнулся с тем же симптомом. и моя проблема была, я не звонил (и вызвал ошибку "недостаточно памяти")
[db open];
не забудьте сделать это для устранения проблем с fmdb db.traceExecution=YES; db.logsErrors= ДА;
Вам нужно обеспечить все процессы
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