MST

星途 面试题库

面试题:Flutter中SQLite数据库插入多条数据的优化实现

在Flutter开发中,使用SQLite数据库时,若要一次性插入多条数据,如何在代码层面优化插入操作以提升性能?请阐述思路并给出核心代码示例。
24.6万 热度难度
前端开发Flutter

知识考点

AI 面试

面试题答案

一键面试

思路

  1. 事务处理:将多条插入操作放在一个事务中,这样数据库只需要进行一次磁盘同步(而不是每次插入都同步),减少I/O开销。
  2. 批量插入语句:使用INSERT INTO... VALUES语句一次插入多条数据,而不是多次执行单条插入语句。

核心代码示例

  1. 首先添加sqflite依赖到pubspec.yaml文件:
dependencies:
  sqflite: ^2.2.3
  1. 以下是插入多条数据的代码:
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);
}