我需要在Flutter中使用SQFlite包将多条记录(数千条)插入数据库。每条记录包含大约50列(员工的属性,如姓名,出生日期,地址,移动的号码等)。假设有一个名为Employee的类,我有一个需要在本地插入的雇员列表:
Class Employee {
String name;
String address;
String mobileNumber;
// ... and many more fields
}
// And then i have a list of employees
List<Employee> employees = await fetchEmployeesFromNetwork();
据我所知,SQFlite包中没有可用的bulkInsert方法,我只能找到以下方法:
1.遍历雇员列表,并使用批处理插入将雇员逐个插入到批处理中,如下所示
await db.transaction((txn)async {
var batch = txn.batch();
for (var emp in employees) {
batch.insert(employeeTable, emp.toMap(), conflictAlgorithm: ConflictAlgorithm.replace);
}
await batch.commit();
});
或
1.使用rawInsert生成一个语句并像这样一次插入
INSERT INTO 'employees' ('column1', 'column2', /* and other columns */) VALUES
('data1', 'data2'),
('data1', 'data2'),
('data1', 'data2');
我想问的问题是,在性能等方面,哪种方法更好?(或者只是偏好的问题?),是否有其他专门用于批量插入SQFlite中记录的方法/方式?
1条答案
按热度按时间rdrgkggo1#
两个案子都有利有弊,
如果在您的情况下有非常大量的数据,那么原始查询会更好更快,但如果在插入过程中发生错误,则不支持回滚。
相反,在使用批处理中,它将操作视为单个横切,因此回滚是可能的,并且也是安全的。
所以最后它来到你面前,这是你的要求。