Flutter & Dart SQL Lite 包:是否可以在一个查询中执行多个 Update 语句(每次的 whereArg 不同)

问题描述 投票:0回答:1

我正在考虑让我的 SQL 查询更高效。 一个查询语句,而不是使用 for 循环并使用相同的查询和不同的值向数据库发送垃圾邮件。 看看我在这里做什么,请检查是否可以提高效率。 据我了解,映射中可以有多个具有相同值的值,但不能有多个相同的键。这就是我的困境。

Future<void> updateAllGoalsFollowingReorder(
      List<Goal> newGoalTileList) async {
    final db = await _getDatabase();

    for (var goal in newGoalTileList) {
      var response = await db.update(
          _goalsTable,
          {
            'goalIndexForDb': goal.goalIndexForDb,
          },
          where: 'id = ?',
          whereArgs: [goal.id]);
      print(response);
    }
  }

我尝试创建一个目标 id 列表并将其放置在 whereArgs 中。但对于地图:

{ 'goalIndexForDb': goal.goalIndexForDb, },
我显然不能为每个值使用相同的键。有没有办法实现这个目标?

sql flutter sqlite dart sqflite
1个回答
0
投票

您可以使用

batch update
来完成此类工作。像这样的代码,

Future<void> updateAllGoalsFollowingReorder(List<Goal> newGoalTileList) async {
    final db = await _getDatabase();
    var batch = db.batch();

    for (var goal in newGoalTileList) {
        batch.update(
            _goalsTable,
            {'goalIndexForDb': goal.goalIndexForDb},
            where: 'id = ?',
            whereArgs: [goal.id]
        );
    }

    var responses = await batch.commit();
    print(responses);
}

参考:

https://pub.dev/packages/sqflite#batch-support

© www.soinside.com 2019 - 2024. All rights reserved.