面试题答案
一键面试思路
- 事务处理:将多条插入操作放在一个事务中,这样数据库只需要进行一次磁盘同步(而不是每次插入都同步),减少I/O开销。
- 批量插入语句:使用
INSERT INTO... VALUES
语句一次插入多条数据,而不是多次执行单条插入语句。
核心代码示例
- 首先添加
sqflite
依赖到pubspec.yaml
文件:
dependencies:
sqflite: ^2.2.3
- 以下是插入多条数据的代码:
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
Future<void> insertMultipleData(List<List<dynamic>> dataList) async {
// 打开数据库
final database = openDatabase(
join(await getDatabasesPath(), 'example.db'),
onCreate: (db, version) {
return db.execute(
'CREATE TABLE Users(id INTEGER PRIMARY KEY, name TEXT, age INTEGER)',
);
},
version: 1,
);
final db = await database;
await db.transaction((txn) async {
// 构建批量插入语句
String values = '';
for (var i = 0; i < dataList.length; i++) {
var row = dataList[i];
values += '(${row[0]}, "${row[1]}", ${row[2]})';
if (i < dataList.length - 1) {
values += ', ';
}
}
String sql = 'INSERT INTO Users (id, name, age) VALUES $values';
await txn.rawInsert(sql);
});
}
使用示例:
void main() async {
List<List<dynamic>> dataList = [
[1, 'John', 25],
[2, 'Jane', 30],
[3, 'Bob', 22]
];
await insertMultipleData(dataList);
}