我有cities
表,并在创建数据库时尝试插入城市。表结构非常简单,只有id
和name
列。
在数据库类的onCreate
方法中,我使用以下命令创建表:
var tblCities = 'cities';
await db.execute('CREATE TABLE $tblCities (id INTEGER PRIMARY KEY, name TEXT)');
我有Cities
个模型类,具有fromMap
和toMap
方法。
大约有350个城市,我想将它们插入表格中。
问。最简单的方法是什么?
这是我的主意:
for
循环迭代整个列表toMap
方法创建城市地图db.insert
方法我不确定,但是这种方法似乎很愚蠢,因此在考虑更好和优化的解决方案...
答案 0 :(得分:2)
如@chunhunghan所述,您可以使用批处理插入批量数据。
这是逐步指南:
cities.json
(创建数据的csv文件,并使用csv到json转换器,例如this)cities.json
目录中添加assets
文件在pubspec.yaml
中定义它,如下所示:
assets:
- assets/cities.json
将此代码粘贴到数据库类的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)
您可以编写原始查询以一次将所有数据插入数据库。