Flutter中SQFlite删除数据行无效,寻求其他可行解决方案
问题分析与解决
首先明确:sqflite官方提供的删除数据行的方法只有两种,你已经都试过了——rawDelete(执行原生SQL语句)和db.delete(封装好的便捷方法),不存在其他官方删除方式。你遇到的count=0问题,本质是没有匹配到要删除的数据行,而非方法本身的问题,以下是排查方向:
- 严格校验
item.id与数据库中id的一致性:因为你的id是TEXT类型主键,匹配时会严格区分大小写、空格、特殊字符,哪怕差一个字符都无法匹配。可以直接打印item.id的值,再通过查询语句确认数据库中是否存在该id的数据:
// 先查询确认数据是否存在 final queryResult = await db.query('user_list', where: 'id = ?', whereArgs: [id]); print("查询结果:$queryResult");
如果查询结果为空,说明数据库里根本没有这条数据,自然删不掉。
检查数据插入逻辑:确认你要删除的这条数据,插入时是否正确写入了对应的
id值,有没有出现插入时id被篡改、未赋值的情况。临时排查参数绑定问题:如果确认数据存在但参数绑定方式删不掉,可以临时用字符串拼接的方式(注意:生产环境禁止这么做,会有SQL注入风险)测试:
final count = await db.rawDelete('DELETE FROM user_list WHERE id = "$id"');
如果这样能删除成功,说明参数绑定过程中可能出现了异常,但这种情况极少发生,更多还是id匹配的问题。
另外,你代码中修改state的部分,如果是使用状态管理框架,需要确保触发状态更新,否则UI不会同步变化,但这和数据库删除的count结果无关。
内容的提问来源于stack exchange,提问作者Prashant
相关产品推荐
相关产品推荐

