Flutter如何封装SQLite数据库

在Flutter项目中,我想封装一个SQLite数据库操作类,但不太清楚具体该怎么做。目前遇到的问题包括:如何创建数据库连接、如何设计通用的增删改查方法、以及如何管理数据库版本升级。有没有比较好的封装方案或最佳实践可以分享?最好能提供一些示例代码,谢谢!

2 回复

在Flutter中封装SQLite数据库,可使用sqflite插件。步骤如下:

  1. 添加依赖:sqflitepath_provider
  2. 创建数据库帮助类,定义表结构和CRUD方法
  3. 使用单例模式管理数据库实例
  4. 封装增删改查操作,返回Future对象

示例代码:

class DatabaseHelper {
  static Database? _database;
  Future<Database> get database async {
    return _database ??= await _initDB();
  }
  // 初始化数据库和表
  // 实现insert, query, update, delete方法
}

更多关于Flutter如何封装SQLite数据库的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 中封装 SQLite 数据库可以通过 sqflite 包实现,它提供了轻量级的 SQLite 数据库操作支持。以下是封装步骤和示例代码:

1. 添加依赖

pubspec.yaml 中添加:

dependencies:
  sqflite: ^2.0.0+4
  path: ^1.8.0

2. 封装数据库操作类

创建一个 DatabaseHelper 类,用于管理数据库的创建、升级和表操作。

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

class DatabaseHelper {
  static final DatabaseHelper _instance = DatabaseHelper._internal();
  static Database? _database;

  DatabaseHelper._internal();

  factory DatabaseHelper() => _instance;

  Future<Database> get database async {
    _database ??= await _initDatabase();
    return _database!;
  }

  Future<Database> _initDatabase() async {
    String path = join(await getDatabasesPath(), 'my_database.db');
    return await openDatabase(
      path,
      version: 1,
      onCreate: _createTable,
    );
  }

  Future<void> _createTable(Database db, int version) async {
    await db.execute('''
      CREATE TABLE users(
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        email TEXT NOT NULL
      )
    ''');
  }

  // 插入数据
  Future<int> insertUser(Map<String, dynamic> user) async {
    Database db = await database;
    return await db.insert('users', user);
  }

  // 查询所有数据
  Future<List<Map<String, dynamic>>> getUsers() async {
    Database db = await database;
    return await db.query('users');
  }

  // 更新数据
  Future<int> updateUser(Map<String, dynamic> user) async {
    Database db = await database;
    return await db.update(
      'users',
      user,
      where: 'id = ?',
      whereArgs: [user['id']],
    );
  }

  // 删除数据
  Future<int> deleteUser(int id) async {
    Database db = await database;
    return await db.delete(
      'users',
      where: 'id = ?',
      whereArgs: [id],
    );
  }
}

3. 使用封装类

在 Flutter 应用中调用封装的方法:

// 插入用户
await DatabaseHelper().insertUser({
  'name': 'John',
  'email': 'john@example.com'
});

// 查询用户
List<Map<String, dynamic>> users = await DatabaseHelper().getUsers();

封装要点:

  • 单例模式:确保数据库实例唯一。
  • 异步操作:所有数据库方法使用 async/await
  • 错误处理:可添加 try-catch 处理异常。
  • 模型类:建议结合模型类(如 User)转换数据。

这样封装后,代码更清晰且易于维护,避免了重复的数据库操作逻辑。

回到顶部