在 Sqflite 中插入多条记录

Ale*_*Pad 10 sqlite flutter sqflite

如何快速插入多条记录sqflite?标准的快速方法是:

await database.insert(table, object.toMap())
Run Code Online (Sandbox Code Playgroud)

但我不认为用循环一对一插入记录是个好主意。或者我可以通过事务插入所有列表?

Cop*_*oad 21

正如我在评论中提到的,您可以使用Batch. 这是示例。

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']);
Run Code Online (Sandbox Code Playgroud)

现在,如果您正在寻找结果(它会花费您一些内存),您可以使用

results = await batch.commit();
Run Code Online (Sandbox Code Playgroud)

如果您正在寻找快速的性能,只需忽略结果并使用

await batch.commit(noResult: true);
Run Code Online (Sandbox Code Playgroud)

来源


小智 10

在这种情况下,您可以使用批处理。

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();
Run Code Online (Sandbox Code Playgroud)

大批量,你可以使用 await batch.commit(noResult: true);


Mih*_*aiV 5

如果您有要插入的对象列表,您可以这样做(这不是一个非常干净的代码,但它可以工作):

  insertClients(List<Client> clients) async {
    final db = await database;
    var buffer = new StringBuffer();
    clients.forEach((c) {
      if (buffer.isNotEmpty) {
        buffer.write(",\n");
      }
      buffer.write("('");
      buffer.write(c.firstName);
      buffer.write("', '");
      buffer.write(c.lastName);
      buffer.write("', '");
      buffer.write(c.address);
      buffer.write("')");
    });
    var raw =
        await db.rawInsert("INSERT Into Clients (firstName,lastName,address)"
            " VALUES ${buffer.toString()}");
    return raw;
  }
Run Code Online (Sandbox Code Playgroud)

我正在使用 SQLite 中的这条语句:

INSERT INTO 'tablename' ('column1', 'column2') VALUES
                ('data1', 'data2'),
                ('data1', 'data2'),
                ('data1', 'data2');
Run Code Online (Sandbox Code Playgroud)

  • 虽然我确实更喜欢批处理解决方案,但如果您仍然需要单个语句,则应该使用内容列的参数并构建类似 sql 的内容: INSERT INTO 'tablename' ('column1', 'column2') VALUES (?, ?) , (?, ?), (?, ?); 参数:['数据1','数据2','数据1','数据2','数据1','数据2']; (2认同)