MST

星途 面试题库

面试题:Flutter中SQLite数据库事务处理的基本流程

在Flutter开发中,简述使用SQLite进行事务处理的基本步骤,例如如何开始一个事务、如何提交或回滚事务,并给出一个简单的代码示例。
35.7万 热度难度
前端开发Flutter

知识考点

AI 面试

面试题答案

一键面试
  1. 开始事务
    • 使用Database对象的transaction方法开始一个事务。该方法接受一个回调函数,在这个回调函数中编写事务内的数据库操作。
  2. 提交事务
    • 在事务回调函数内,如果所有操作都成功,无需额外的显式提交语句。当回调函数正常返回(没有抛出异常)时,事务会自动提交。
  3. 回滚事务
    • 如果在事务回调函数内抛出异常,事务会自动回滚。

以下是一个简单的代码示例:

import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';

Future<void> main() async {
  // 打开数据库
  final String databasesPath = await getDatabasesPath();
  final String path = join(databasesPath, 'test.db');
  Database database = await openDatabase(
    path,
    version: 1,
    onCreate: (Database db, int version) async {
      await db.execute('CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)');
    },
  );

  try {
    await database.transaction((txn) async {
      // 插入数据
      await txn.rawInsert('INSERT INTO users (name) VALUES ("John")');
      await txn.rawInsert('INSERT INTO users (name) VALUES ("Jane")');
      // 如果这里没有抛出异常,事务会自动提交
    });
    print('事务成功提交');
  } catch (e) {
    print('事务回滚: $e');
  } finally {
    // 关闭数据库
    await database.close();
  }
}