Flutter SQFlite 如何根据整数ID列表批量删除多条数据
SQFlite in Flutter
你之前直接传入ID列表不生效的原因是,原有的where条件id = ?仅配置了1个占位符,无法和多个ID参数匹配。要实现批量删除,可使用SQL的IN操作符,动态生成和ID数量匹配的占位符即可,具体实现如下:
基础实现代码
Future<int> deleteMultiple(List<int> toBeDeleted) async { Database db = await instance.database; // 按ID数量生成对应个数的?占位符,用逗号拼接 String wherePlaceholders = List.filled(toBeDeleted.length, '?').join(', '); return await db.delete( myTable, where: 'id IN ($wherePlaceholders)', whereArgs: toBeDeleted, ); }
优化兼容空列表场景
如果存在传入的待删除ID列表为空的场景,需要提前做判空处理,避免生成IN ()的非法SQL语法导致运行报错:
Future<int> deleteMultiple(List<int> toBeDeleted) async { // 空列表直接返回,不执行删除操作 if (toBeDeleted.isEmpty) return 0; Database db = await instance.database; String wherePlaceholders = List.filled(toBeDeleted.length, '?').join(', '); return await db.delete( myTable, where: 'id IN ($wherePlaceholders)', whereArgs: toBeDeleted, ); }
调用时直接传入你的待删除ID列表即可:
List<int> toBeDeleted = [5, 4, 8]; int deletedCount = await deleteMultiple(toBeDeleted);
函数返回值为本次实际删除的行数。
内容的提问来源于stack exchange,提问作者Hardik
相关产品推荐
相关产品推荐

