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

时间:2019-09-24 07:05:16

标签: flutter dart bulkinsert sqflite

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

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

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

我有Cities个模型类,具有fromMaptoMap方法。

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

。最简单的方法是什么?

这是我的主意:

  1. 创建城市列表
  2. 使用for循环迭代整个列表
  3. 使用toMap方法创建城市地图
  4. 在循环内调用db.insert方法

我不确定,但是这种方法似乎很愚蠢,因此在考虑更好和优化的解决方案...

3 个答案:

答案 0 :(得分:2)

如@chunhunghan所述,您可以使用批处理插入批量数据。

这是逐步指南:

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

    assets:
     - assets/cities.json
    
  4. 将此代码粘贴到数据库类的onCreate方法内(确保在创建表后查询它)

    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();
    

就是这样! :)

答案 1 :(得分:1)

有批量支持
    为了避免在Dart和本机代码之间进行乒乓球,您可以使用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

答案 2 :(得分:0)

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