如何在Sqflite flutter中批量插入记录

vsdwdz23  于 2023-06-30  发布在  Flutter
关注(0)|答案(1)|浏览(231)

我需要在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中记录的方法/方式?

rdrgkggo

rdrgkggo1#

两个案子都有利有弊,
如果在您的情况下有非常大量的数据,那么原始查询会更好更快,但如果在插入过程中发生错误,则不支持回滚。
相反,在使用批处理中,它将操作视为单个横切,因此回滚是可能的,并且也是安全的。
所以最后它来到你面前,这是你的要求。

相关问题