Flutter使用sqflite数据库

259 阅读1分钟
  1. 因为Flutter原生是没有数据库的,因此必须通过三方插件,在Flutter中常用的数据也就是sqflite,因此我们必须先引入sqflite: ^2.3.0
  2. 首先我们需要创建一个DB的Base类去操作对应的数据表
import 'package:finance/db/db_manager.dart';
import 'package:flutter/material.dart';
import 'package:sqflite/sqflite.dart';
///@changeRecord [修改记录]<br />
abstract class BaseDBProvider {
  bool isTableExits = false;

  tableSqlString();

  tableName();

  tableBaseString(String name, String columnId) {
    return ''' create table $name($columnId integer primary key autoincrement ,''';
  }

  Future<Database> getDataBase() async {
    return await open();
  }

  @mustCallSuper
  prepare(name, String createSql) async {
    isTableExits = await DBManager.isTableExits(name);
    if (!isTableExits) {
      Database db = await DBManager.getCurrentDataBase();
      return await db.execute(createSql);
    }
  }

  @mustCallSuper
  open() async {
    if (!isTableExits) {
      await prepare(tableName(), tableSqlString());
    }

    return await DBManager.getCurrentDataBase();
  }
}
  1. 创建一个数据库的实体类实现对应的toMap和toJson方法
const String columnTitle = "title";
const String columnText = "text";

class FinanceEntity {
 late int id;
 late String title;
 late String text;

 FinanceEntity({required this.title, required this.text});

 static Map<String, dynamic> toMap(FinanceEntity todo) {
   return {columnTitle: todo.title, columnText: todo.text};
 }

 factory FinanceEntity.fromJson(Map<String, dynamic> json) {
   return FinanceEntity(
     title: json["title"],
     text: json["text"],
   );
 }
}
  1. 最后在对应的操作类实现操作方法
const String tableNames = "finance";
const String columnId = "_id";

class FinanceDao extends BaseDBProvider {
  @override
  tableName() {
    return tableNames;
  }

  @override
  tableSqlString() {
    return tableBaseString(tableNames, columnId) + '''$columnTitle text,$columnText text )''';
  }

  ///插入一条消息
  Future insertTodo(FinanceEntity todo) async {
    Database db = await getDataBase();
    return await db.insert(tableNames, FinanceEntity.toMap(todo));
  }

  Future<FinanceEntity?> getFinanceById(String id) async {
    Database db = await getDataBase();
    List<Map<String, dynamic>> maps = await db.query(tableNames, where: " id = ?", whereArgs: [id]);
    if (maps.isNotEmpty) {
      return FinanceEntity.fromJson(maps.first);
    }
    return null;
  }

  Future<List<FinanceEntity>> getAllFinance() async {
    List<FinanceEntity> list = [];
    Database db = await getDataBase();
    List<Map<String, dynamic>> maps = await db.query(tableNames, columns: [columnId,columnTitle, columnText]);
    if (maps.isNotEmpty) {
      for (var map in maps) {
        list.add(FinanceEntity.fromJson(map));
      }
    }
    return list;
  }
}

5.测试数据

FinanceDao dao = FinanceDao();

FinanceEntity todo = FinanceEntity(title: "测试一", text: "我是测试文本");
dao.insertTodo(todo);