【问题标题】:I am trying to delete data from database, but sometime data is deleted and sometime data is not deleted我正在尝试从数据库中删除数据,但有时数据会被删除,有时数据不会被删除
【发布时间】:2019-12-22 20:02:17
【问题描述】:

我正在尝试从数据库中删除表视图的 didSelectRowAtIndexPath 方法上的数据,但未删除数据。有时记录会被删除,但有时不会被删除。 显示旧数据。

    const char *dbpath = [databasePath UTF8String];
    if(sqlite3_open(dbpath, & contactDB) == SQLITE_OK)
    {
        NSString *deleteSQL = [NSString stringWithFormat:@"delete from userDetails where name = '%@'", _name.text];
        NSLog(@"%@:", deleteSQL);
        const char *delete_stmt = [deleteSQL UTF8String];
        sqlite3_prepare_v2( contactDB, delete_stmt, -1, &statement, NULL);
        if (sqlite3_step(statement) == SQLITE_DONE)
        {
            _dbStatus.text = @"record is deleted";
        } else {
            _dbStatus.text = @"record not deleted";
            NSLog(@"Error: %s", sqlite3_errmsg(contactDB));
        }
        sqlite3_close(contactDB);
    }
    [tableview reloadData];
}


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    [resultentArray removeObjectAtIndex:indexPath.row];
    NSString *selectedRow1 = [[resultentArray objectAtIndex:indexPath.row]valueForKey:@"name"];
}

【问题讨论】:

  • 可能与您的问题无关,但从不使用 stringWithFormat 构建查询。将值正确绑定到准备好的语句中。在完成所有准备好的语句后,您还应该调用sqlite3_finalize

标签: ios objective-c sqlite


【解决方案1】:

您没有展示如何调用从数据库中删除的方法,或者 _name.text 的来源,但我最初的倾向是您在使用它之前从数据模型数组中删除目标行:

[resultentArray removeObjectAtIndex:indexPath.row];
    NSString *selectedRow1 = [[resultentArray objectAtIndex:indexPath.row]valueForKey:@"name"];

这将导致 selectedRow1 成为目标行之后 next 索引处的对象。如果您尝试删除最后一行,我认为这会导致 in index out of bounds 错误。

尝试颠倒这两个的顺序(获取目标行然后删除它),看看它是否有任何区别。如果它没有编辑您的问题以发布一些附加代码,说明您如何调用从数据库中删除的方法,以及如何设置 _name.text

NSString *selectedRow1 = [[resultentArray objectAtIndex:indexPath.row]valueForKey:@"name"];
[resultentArray removeObjectAtIndex:indexPath.row];

【讨论】:

  • 是的,当我从数据库中删除带有记录的目标行时,会出现索引越界错误。
  • 到目前为止,无法使用上述代码从数据库中删除数据。
猜你喜欢
  • 1970-01-01
  • 2021-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-08
  • 2017-12-05
  • 2018-05-01
相关资源
最近更新 更多