1.首先,确保你已经在pubspec.yaml文件中添加了sqflite插件的依赖。

dependencies:
  sqflite: ^2.0.0+3

2.导包

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

3.创建一个数据库帮助类,用于管理数据库的创建和版本控制。

class DatabaseHelper {
  static final DatabaseHelper _instance = DatabaseHelper.internal();
  factory DatabaseHelper() => _instance;

  static Database? _database;

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

  DatabaseHelper.internal();

  Future<Database> initDatabase() async {
    String databasesPath = await getDatabasesPath();
    String path = join(databasesPath, 'alarm.db');

    return await openDatabase(
      path,
      version: 1,
      onCreate: (Database db, int version) async {
        await db.execute('''
          CREATE TABLE alarm (
            id INTEGER PRIMARY KEY,
            name TEXT,
            type TEXT,
            hour INTEGER,
            min INTEGER
          )
        ''');
      },
    );
  }
}

4.创建一个Alarm模型类,用于表示数据库中的每个记录。

class Alarm {
  int? id;
  String? name;
  String? type;
  int? hour;
  int? min;

  Alarm({this.id, this.name, this.type, this.hour, this.min});

  Map<String, dynamic> toMap() {
    return {
      'id': id,
      'name': name,
      'type': type,
      'hour': hour,
      'min': min,
    };
  }

  factory Alarm.fromMap(Map<String, dynamic> map) {
    return Alarm(
      id: map['id'],
      name: map['name'],
      type: map['type'],
      hour: map['hour'],
      min: map['min'],
    );
  }
}

5.在需要进行增删改查操作的地方,使用数据库帮助类进行操作。

DatabaseHelper dbHelper = DatabaseHelper();

// 插入一条记录
Future<void> insertAlarm(Alarm alarm) async {
  final db = await dbHelper.database;
  await db!.insert('alarm', alarm.toMap());
}

// 获取所有记录
Future<List<Alarm>> getAlarms() async {
  final db = await dbHelper.database;
  final List<Map<String, dynamic>> maps = await db!.query('alarm');
  return List.generate(maps.length, (i) {
    return Alarm.fromMap(maps[i]);
  });
}

// 更新一条记录
Future<void> updateAlarm(Alarm alarm) async {
  final db = await dbHelper.database;
  await db!.update(
    'alarm',
    alarm.toMap(),
    where: 'id = ?',
    whereArgs: [alarm.id],
  );
}

// 删除一条记录
Future<void> deleteAlarm(int id) async {
  final db = await dbHelper.database;
  await db!.delete(
    'alarm',
    where: 'id = ?',
    whereArgs: [id],
  );
}

6.这样,你就可以使用上述函数进行增删改查操作了。例如:

// 创建一个新的Alarm对象
Alarm newAlarm = Alarm(
  name: 'Wake Up',
  type: 'Daily',
  hour: 7,
  min: 30,
);

// 插入一条记录
await insertAlarm(newAlarm);

// 获取所有记录
List<Alarm> alarms = await getAlarms();
print(alarms);

// 更新一条记录
newAlarm.name = 'New Alarm Name';
await updateAlarm(newAlarm);

// 删除一条记录
await deleteAlarm(newAlarm.id!);
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐