本文整理自网络,侵删。
前言
数据库存储是我们常用的存储方式之一,对大批量数据有增、删、改、查操作需求时,我们就会想到使用数据库,Flutter中提供了一个sqflite插件供我们用于大量数据执行CRUD操作。本篇我们就来一起学习sqflite的使用。
sqflite是一款轻量级的关系型数据库,类似SQLite。
在Flutter平台我们使用sqflite库来同时支持Android 和iOS。
sqflite使用
引入插件
在pubspec.yaml文件中添加path_provider插件,最新版本为1.0.0,如下:
dependencies: flutter: sdk: flutter #sqflite插件 sqflite: 1.0.0
然后命令行执行flutter packages get即可将插件下载到本地。
数据库操作方法介绍
1. 插入操作
插入数据操作有两个方法:
Future<int> rawInsert(String sql, [List<dynamic> arguments]); Future<int> insert(String table, Map<String, dynamic> values, {String nullColumnHack, ConflictAlgorithm conflictAlgorithm});
rawInsert方法第一个参数为一条插入sql语句,可以使用?作为占位符,通过第二个参数填充数据。
insert方法第一个参数为操作的表名,第二个参数map中是想要添加的字段名和对应字段值。
2. 查询操作
查询操作同样实现了两个方法:
Future<List<Map<String, dynamic>>> query(String table, {bool distinct, List<String> columns, String where, List<dynamic> whereArgs, String groupBy, String having, String orderBy, int limit, int offset}); Future<List<Map<String, dynamic>>> rawQuery(String sql, [List<dynamic> arguments]);
query方法第一个参数为操作的表名,后边的可选参数依次表示是否去重、查询字段、WHERE子句(可使用?作为占位符)、WHERE子句占位符参数值、GROUP BY子句、HAVING子句、ORDER BY子句、查询的条数、查询的偏移位等。
rawQuery方法第一个参数为一条查询sql语句,可以使用?作为占位符,通过第二个参数填充数据。
3. 修改操作
修改操作同样实现了两个方法:
Future<int> rawUpdate(String sql, [List<dynamic> arguments]); Future<int> update(String table, Map<String, dynamic> values, {String where, List<dynamic> whereArgs, ConflictAlgorithm conflictAlgorithm});
rawUpdate方法第一个参数为一条更新sql语句,可以使用?作为占位符,通过第二个参数填充数据。
update方法第一个参数为操作的表名,第二个参数为修改的字段和对应值,后边的可选参数依次表示WHERE子句(可使用?作为占位符)、WHERE子句占位符参数值、发生冲突时的操作算法(包括回滚、终止、忽略等等)。
4. 删除操作
修改操作同样实现了两个方法:
Future<int> rawDelete(String sql, [List<dynamic> arguments]); Future<int> delete(String table, {String where, List<dynamic> whereArgs});
rawDelete方法第一个参数为一条删除sql语句,可以使用?作为占位符,通过第二个参数填充数据。
delete方法第一个参数为操作的表名,后边的可选参数依次表示WHERE子句(可使用?作为占位符)、WHERE子句占位符参数值。
举个栗子
我们以图书管理系统来举例。
首先,我们创建一个书籍类,包括书籍ID、书名、作者、价格、出版社等信息。
final String tableBook = 'book'; final String columnId = '_id'; final String columnName = 'name'; final String columnAuthor = 'author'; final String columnPrice = 'price'; final String columnPublishingHouse = 'publishingHouse'; class Book { int id; String name; String author; double price; String publishingHouse; Map<String, dynamic> toMap() { var map = <String, dynamic>{ columnName: name, columnAuthor: author, columnPrice: price, columnPublishingHouse: publishingHouse }; if (id != null) { map[columnId] = id; } return map; } Book(); Book.fromMap(Map<String, dynamic> map) { id = map[columnId]; name = map[columnName]; author = map[columnAuthor]; price = map[columnPrice]; publishingHouse = map[columnPublishingHouse]; } }
其次,我们开始实现数据库相关操作:
相关阅读 >>
rxjava2_flowable_Sqlite_android数据库访问实例
更多相关阅读请进入《Sqlite》频道 >>
数据库系统概念 第6版
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。