面试题答案
一键面试事务优化插入性能原理
在Flutter中使用SQLite进行大量数据插入时,开启事务可以显著提升性能。因为每次单独的插入操作都会涉及磁盘I/O等开销,而事务允许将多个插入操作作为一个整体来处理,只有在事务结束时才真正提交到数据库,减少了I/O次数。
关键代码示例
- 引入依赖
在
pubspec.yaml
文件中添加sqflite
依赖:
dependencies:
sqflite: ^2.2.1
- 使用事务插入数据
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
Future<void> insertDataInTransaction(List<Map<String, dynamic>> dataList) async {
// 打开数据库
final databasePath = await getDatabasesPath();
final path = join(databasePath, 'example.db');
final db = await openDatabase(
path,
version: 1,
onCreate: (Database db, int version) async {
await db.execute('''
CREATE TABLE example_table (
id INTEGER PRIMARY KEY,
name TEXT,
age INTEGER
)
''');
},
);
// 开启事务
await db.transaction((txn) async {
for (var data in dataList) {
await txn.rawInsert(
'INSERT INTO example_table (name, age) VALUES (?,?)',
[data['name'], data['age']],
);
}
});
// 关闭数据库
await db.close();
}
在上述代码中,insertDataInTransaction
函数接收一个包含多条数据的List<Map<String, dynamic>>
。首先打开数据库并创建表(如果不存在),然后通过db.transaction
开启事务,在事务内部循环执行插入操作。最后关闭数据库。这样就通过事务优化了大量数据插入的性能。