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);
如果您有要插入的对象列表,您可以这样做(这不是一个非常干净的代码,但它可以工作):
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)
| 归档时间: |
|
| 查看次数: |
11444 次 |
| 最近记录: |