Flutter:在数据库中插入数据列表的有效方法

Flutter: Effective way of inserting list of data in database

我有 cities table 并尝试在创建数据库时插入城市。 table 结构非常简单,它只有 idname 列。

在我的数据库 class 的 onCreate 方法中,我使用以下命令创建 table:

var tblCities = 'cities';
await db.execute('CREATE TABLE $tblCities (id INTEGER PRIMARY KEY, name TEXT)');

我有 Cities 模型 class 和 fromMaptoMap 方法。

大约有 350 个城市,我想将它们插入 table。

问。最好和最简单的方法是什么?

我想到了这个:

  1. 正在创建城市列表
  2. 使用for循环遍历整个列表
  3. 使用 toMap 方法创建城市地图
  4. 在循环中调用 db.insert 方法

我不确定,但这看起来很愚蠢,所以考虑更好和优化的解决方案...

您可以编写一个原始查询,将所有数据一次性插入到数据库中。

有批量支持
为了避免飞镖和本机代码之间的乒乓球,你可以使用 Batch:

batch = db.batch();
batch.insert('Test', {'name': 'item'});
batch.update('Test', {'name': 'new_item'}, where: 'name = ?', whereArgs: ['item']);
batch.delete('Test', where: 'name = ?', whereArgs: ['item']);
results = await batch.commit();

官方示例https://github.com/tekartik/sqflite/blob/master/sqflite/example/lib/batch_test_page.dart

在你的例子中,使用 batch.insert 命令的循环列表,更容易维护
为了简化语法,请使用 toMap,例如

batch.insert("cities", city.toMap());   

详情https://www.techiediaries.com/flutter-sqlite-crud-tutorial/

如果您更喜欢rawInsert,请参考Insert multiple records in Sqflite

正如@chunhunghan 所提到的,您可以使用批处理来插入批量数据。

以下是分步指南:

  1. 准备好您的 json 文件,例如 cities.json(创建数据的 csv 文件并使用 csv 到 json 转换器,如 this
  2. 在您的 assets 目录中添加 cities.json 文件
  3. pubspec.yaml中这样定义它:

    assets:
     - assets/cities.json
    
  4. 将此代码粘贴到数据库 class 的 onCreate 方法中(确保其在 table 创建查询之后)

    Batch batch = db.batch();
    
    String citiesJson = await rootBundle.loadString('assets/json/cities.json');
    List citiesList = json.decode(citiesJson);
    
    
    citiesList.forEach((val) {
      //assuming you have 'Cities' class defined
      Cities city = Cities.fromMap(val);
      batch.insert(tblCities, city.toMap());
    });
    
    batch.commit();
    

就是这样! :)