使用SQLite数据库存储数据(4)删除数据记录

删除数据记录

当从UITableView中删除一行记录时,将调用commitEditingStyle方法。
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
// Get the object to delete from the array
NotebookInfo *notebookInfo = [noteArray objectAtIndex:indexPath.row];
[self removeNotebook: notebookInfo];

// Delete the object from the table
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
}

- (void)removeNotebook:(NotebookInfo *)notebookInfo {
// Delete it from the database
sqlite3_stmt *statement;

const char *sql = "delete from Notebook where id = ?";
// 编译SQL 语句,创建Statement 对象
if(sqlite3_prepare_v2(noteDB, sql, -1, &statement, NULL) != SQLITE_OK)
NSAssert1(0, @"Error while creating delete statement. '%s'", sqlite3_errmsg(noteDB));

//When binding parameters, index starts from 1 and not zero.
sqlite3_bind_int(statement, 1, notebookInfo.pk_id);

// SQLITE_DONE 表示成功执行了Statement
if (sqlite3_step(statement)  != SQLITE_DONE)
NSAssert1(0, @"Error while deleting. '%s'", sqlite3_errmsg(noteDB));

// Reset a prepared Statement object
sqlite3_reset(statement);
// Destroy the Statement object
sqlite3_finalize(statement);

// Remove it from the array
[noteArray removeObject:notebookInfo];
}

在上面的代码中,我们实现了从3个地方删除对应的数据记录:
(1) 从SQLite数据表中删除对应的记录;
(2) 从noteArray 数组中删除对应的notebookInfo对象元素;
(3) 从UITableView 中删除对一个的数据行;

现在运行App测试一下,如果代码运行正常,运行效果如下图所示:

原文地址:https://www.cnblogs.com/tuncaysanli/p/2727958.html