栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

flutter floor数据库框架使用

flutter floor数据库框架使用

Flutter floor数据库框架使用
  • Flutter floor数据库框架使用
    • 集成方法
    • 创建实体
    • 创建Dao
    • 创建数据库
    • 使用生成的代码
  • 插入更新删除操作
    • 插入@insert

Flutter floor数据库框架使用 集成方法
dependencies:
   flutter:
     sdk: flutter
   floor: ^1.2.0 #数据库

dev_dependencies:
  flutter_test:
    sdk: flutter

  floor_generator: ^1.2.0
  build_runner: ^2.1.2
创建实体

@entity 标记这一个类是对应一个数据库表。
@primaryKey 用于标记这是数据表的主键

@Entity(tableName: "areas") //表名
class AreaResponseAreaList {
	@primaryKey
	int? id;
	String? name;
	String? code;
	int? priceFlag;
	String? pinyin;
}
创建Dao
@dao
abstract class AreaResponseAreaListDao {
  @Query('SELECt * FROM areas')
  Future> findAllPersons();

  @Query('SELECt * FROM areas WHERe id = :id')
  Stream findPersonById(int id);

  @insert
  Future insertAreas(List areaList);
}
创建数据库

文件名 AppDatabase.dart 需要与 part ‘AppDatabase.g.dart’ 中文件名保持一致,不然导致自动生成文件失败

import 'dart:async';

part 'AppDatabase.g.dart'; // the generated code will be there

@Database(version: 1, entities: [AreaResponseAreaList])
abstract class AppDatabase extends FloorDatabase {
  AreaResponseAreaListDao get areaResponseAreaListDao;
}

运行以下命令 flutter packages pub run build_runner build 自动生成文件,
如果需要在文件变动时,自动重新生成使用 flutter packages pub run build_runner watch
执行命令后生成 AppDatabase.g.dart 文件

使用生成的代码

包含创建、打开数据库,及dao生成的数据库操作代码

// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'AppDatabase.dart';

// **************************************************************************
// FloorGenerator
// **************************************************************************

// ignore: avoid_classes_with_only_static_members
class $FloorAppDatabase {
  /// Creates a database builder for a persistent database.
  /// once a database is built, you should keep a reference to it and re-use it.
  static _$AppDatabaseBuilder databaseBuilder(String name) =>
      _$AppDatabaseBuilder(name);

  /// Creates a database builder for an in memory database.
  /// Information stored in an in memory database disappears when the process is killed.
  /// once a database is built, you should keep a reference to it and re-use it.
  static _$AppDatabaseBuilder inMemoryDatabaseBuilder() =>
      _$AppDatabaseBuilder(null);
}

class _$AppDatabaseBuilder {
  _$AppDatabaseBuilder(this.name);

  final String? name;

  final List _migrations = [];

  Callback? _callback;

  /// Adds migrations to the builder.
  _$AppDatabaseBuilder addMigrations(List migrations) {
    _migrations.addAll(migrations);
    return this;
  }

  /// Adds a database [Callback] to the builder.
  _$AppDatabaseBuilder addCallback(Callback callback) {
    _callback = callback;
    return this;
  }

  /// Creates the database and initializes it.
  Future build() async {
    final path = name != null
        ? await sqfliteDatabaseFactory.getDatabasePath(name!)
        : ':memory:';
    final database = _$AppDatabase();
    database.database = await database.open(
      path,
      _migrations,
      _callback,
    );
    return database;
  }
}

class _$AppDatabase extends AppDatabase {
  _$AppDatabase([StreamController? listener]) {
    changeListener = listener ?? StreamController.broadcast();
  }

  AreaResponseAreaListDao? _areaResponseAreaListDaoInstance;

  Future open(String path, List migrations,
      [Callback? callback]) async {
    final databaseOptions = sqflite.OpenDatabaseOptions(
      version: 1,
      onConfigure: (database) async {
        await database.execute('PRAGMA foreign_keys = ON');
        await callback?.onConfigure?.call(database);
      },
      onOpen: (database) async {
        await callback?.onOpen?.call(database);
      },
      onUpgrade: (database, startVersion, endVersion) async {
        await MigrationAdapter.runMigrations(
            database, startVersion, endVersion, migrations);

        await callback?.onUpgrade?.call(database, startVersion, endVersion);
      },
      onCreate: (database, version) async {
        await database.execute(
            'CREATE TABLE IF NOT EXISTS `areas` (`id` INTEGER, `name` TEXT, `code` TEXT, `priceFlag` INTEGER, `pinyin` TEXT, PRIMARY KEY (`id`))');

        await callback?.onCreate?.call(database, version);
      },
    );
    return sqfliteDatabaseFactory.openDatabase(path, options: databaseOptions);
  }

  @override
  AreaResponseAreaListDao get areaResponseAreaListDao {
    return _areaResponseAreaListDaoInstance ??=
        _$AreaResponseAreaListDao(database, changeListener);
  }
}

class _$AreaResponseAreaListDao extends AreaResponseAreaListDao {
  _$AreaResponseAreaListDao(this.database, this.changeListener)
      : _queryAdapter = QueryAdapter(database, changeListener),
        _areaResponseAreaListInsertionAdapter = InsertionAdapter(
            database,
            'areas',
            (AreaResponseAreaList item) => {
                  'id': item.id,
                  'name': item.name,
                  'code': item.code,
                  'priceFlag': item.priceFlag,
                  'pinyin': item.pinyin
                },
            changeListener);

  final sqflite.DatabaseExecutor database;

  final StreamController changeListener;

  final QueryAdapter _queryAdapter;

  final InsertionAdapter
      _areaResponseAreaListInsertionAdapter;

  @override
  Future> findAllPersons() async {
    return _queryAdapter.queryList('SELECt * FROM areas',
        mapper: (Map row) => AreaResponseAreaList());
  }

  @override
  Stream findPersonById(int id) {
    return _queryAdapter.queryStream('SELECt * FROM areas WHERe id = ?1',
        mapper: (Map row) => AreaResponseAreaList(),
        arguments: [id],
        queryableName: 'areas',
        isView: false);
  }

  @override
  Future insertAreas(List areaList) async {
    await _areaResponseAreaListInsertionAdapter.insertList(
        areaList, OnConflictStrategy.abort);
  }
}

使用生成的 F l o o r A p p D a t a base 类 , 它 允 许 访 问 数 据 库 构 建 器 。 该 名 称 由 FloorAppDatabase类,它允许访问数据库构建器。该名称由 FloorAppDatabase类,它允许访问数据库构建器。该名称由Floor和数据库类名组成

传递给databaseBuilder()的字符串将是数据库文件名。

要初始化数据库,请调用build()并使用await确保结果。
根据数据库database获取到Dao就可以操作数据库了

  final String DB_NAME="Pad7_lxx";
  late final AppDatabase database;
  init() async {
    database = await $FloorAppDatabase
        .databaseBuilder(DB_NAME)
        .build();
    database.areaResponseAreaListDao.findPersonById(id);
  }
插入更新删除操作 插入@insert
// 单个插入
@insert
Future insertAreas(AreaResponseAreaList area);

//插入多个
@insert
Future insertAreas(List areaList);

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/316803.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号