一、前言

光阴荏苒,转眼间2019年快过去一大半了!Flutter也从年初的1.2正式版到现在的1.5正式版,并且4月底谷歌IO大会宣布Flutter支持WEB端开发嵌入式开发,至此F已经支持全端开发了,这足以看到谷歌对这框架的投入;是时候花时间去学习与归纳Flutter知识了!

二、sqflite插件

sqflite基于Sqlite开发的一款flutter插件,其支持iOS和Android,

GitHub地址:https://github.com/tekartik/sqflite

三、集成使用

(1).导入sqflite插件库:

在pubspec.yaml文件中添加sqflite,当前版本1.1.5:

sqflite: ^1.1.5

在dart类中引入:

import 'package:sqflite/sqflite.dart';

(2).创建数据库和数据库表:

在创建数据库前,需要设置创建数据库的路径:

//获取数据库路径
var databasesPath = await getDatabasesPath();
String path = join(databasesPath, dbName);

创建数据库、数据库表:

await openDatabase(path,version:vers,onUpgrade: (Database db, int oldVersion, int newVersion) async{//数据库升级,只回调一次print("数据库需要升级!旧版:$oldVersion,新版:$newVersion");},onCreate: (Database db, int vers) async{//创建表,只回调一次await db.execute(dbTables);await db.close();});

openDatabase方法是用来初始化数据库的,里面有数据库的路径、版本,版本是用来区别新旧数据库的,如表的结构需要发生变化,则需要提高版本进行数据库升级,这是将会回调onUpgrade方法,我们需要在这方法里编写版本升级的逻辑。onCreate方法是创建数据库时回调的方法,只执行一次,因此我们需要在这里创建数据库表。

(3).增:

即插入数据操作,查看官方源码:

 /// Execute a raw SQL INSERT query////// Returns the last inserted record idFuture<int> rawInsert(String sql, [List<dynamic> arguments]);Future<int> insert(String table, Map<String, dynamic> values,{String nullColumnHack, ConflictAlgorithm conflictAlgorithm});

rawInsert方法第一个参数为一条插入sql语句,可以使用?作为占位符,通过第二个参数填充数据。

insert方法第一个参数为操作的表名,第二个参数map中是想要添加的字段名和对应字段值。

(4).删:

即删除数据操作,查看官方源码:

Future<int> rawDelete(String sql, [List<dynamic> arguments]);/// Convenience method for deleting rows in the database.////// Delete from [table]////// [where] is the optional WHERE clause to apply when updating. Passing null/// will update all rows.////// You may include ?s in the where clause, which will be replaced by the/// values from [whereArgs]////// [conflictAlgorithm] (optional) specifies algorithm to use in case of a/// conflict. See [ConflictResolver] docs for more details////// Returns the number of rows affected if a whereClause is passed in, 0/// otherwise. To remove all rows and get a count pass "1" as the/// whereClause.Future<int> delete(String table, {String where, List<dynamic> whereArgs});

rawDelete方法第一个参数为一条删除sql语句,可以使用?作为占位符,通过第二个参数填充数据。

delete方法第一个参数为操作的表名,后边的可选参数依次表示WHERE子句(可使用?作为占位符)、WHERE子句占位符参数值。

(5).改:

即更新数据操作,查看官方源码:

  Future<int> rawUpdate(String sql, [List<dynamic> arguments]);/// Convenience method for updating rows in the database.////// Update [table] with [values], a map from column names to new column/// values. null is a valid value that will be translated to NULL.////// [where] is the optional WHERE clause to apply when updating./// Passing null will update all rows.////// You may include ?s in the where clause, which will be replaced by the/// values from [whereArgs]////// [conflictAlgorithm] (optional) specifies algorithm to use in case of a/// conflict. See [ConflictResolver] docs for more detailsFuture<int> update(String table, Map<String, dynamic> values,{String where,List<dynamic> whereArgs,ConflictAlgorithm conflictAlgorithm});

rawUpdate方法第一个参数为一条更新sql语句,可以使用?作为占位符,通过第二个参数填充数据。

update方法第一个参数为操作的表名,第二个参数为修改的字段和对应值,后边的可选参数依次表示WHERE子句(可使用?作为占位符)、WHERE子句占位符参数值、发生冲突时的操作算法(包括回滚、终止、忽略等等)。

(6).查:

即查询数据操作,查看官方源码:

  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});/// Execute a raw SQL SELECT query////// Returns a list of rows that were foundFuture<List<Map<String, dynamic>>> rawQuery(String sql,[List<dynamic> arguments]);

query方法第一个参数为操作的表名,后面的可选参数依次表示是否去重、查询字段、where子句(可使用?作为占位符)、where占位符参数、GROUP BY 、haveing、ORDER BY、查询的条数、查询的偏移位;

rawQuery方法第一个参数为一条sql查询语句,可使用?占位符,通过第二个arg参数填充占位的数据。

学习了基础后,我简单写了个demo,主要利用SQL语句进行增删改查操作:

今天就学习到这里吧!

>>>支持我的话可以关注下我的公众号,一起学习Android、小程序、跨平台开发~

扫一扫关注我的微信公众号:程序猿在广东

本案例demo地址:

https://github.com/ChessLuo/flutter_data_srorage

Flutter SqlLite数据库快速入门相关推荐

  1. 超经典两万字,MySQL数据库快速入门。

    「作者主页」:士别三日wyx 「作者简介」:CSDN top100.阿里云博客专家.华为云享专家.网络安全领域优质创作者 「专栏简介」:此文章已录入专栏<MySQL数据库快速入门> MyS ...

  2. 视频教程-oracle数据库快速入门-Oracle

    oracle数据库快速入门 十年项目开发经验,主要从事java相关的开发,熟悉各种mvc开发框架. 王振伟 ¥21.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 AP ...

  3. 猿创征文 | 国产数据库实战之TiDB 数据库快速入门

    猿创征文 | 国产数据库实战之TiDB 数据库快速入门 一.系统检查 1.检查系统版本 2.查看本地IP地址 3.TiDB集群介绍 二.快速部署本地测试集群 1.安装 TiUP工具 2.声明全局环境变 ...

  4. 数据库快速入门教程--视频

    数据库快速入门教程--视频 下载地址:http://v.51work6.com/courseInfoRedirect.do?action=courseInfo&courseId=240579 ...

  5. MySQL数据库快速入门到精通(超详细保姆级,建议收藏)这可能是目前最适合你的教程,从基础语法到实例演示。

    前言 此文章旨在为需要掌握快速开发和复习MySQL的同学所准备,您完全可以把此文章当作参考文档来使用,本文将尽量精简,使您快速的理解和掌握语法. 关于MySQL MySQL是一个关系型数据库管理系统, ...

  6. 如何系统的学习数据库、形成自己的数据库体系、数据库快速入门

    1,适合对象:在日常工作过程中,频繁使用数据库的技术人员.研发人员 适合管理数据库的技术人员. 2,开始学习 第一部分:快速的熟悉数据库信息 2.1,熟悉业务系统的基本功能:所有的数据库设计都是依赖于 ...

  7. Titan数据库快速入门之神的光芒

    from:https://rednum.cn/ViewListAction?method=detail&dataid=315&classfyid=1 接触Titan数据库是去年的事情了 ...

  8. mysql外键约束视频教学_外键约束案例_MySQL数据库 快速入门 基础+实战 视频教程_MySQL视频-51CTO学院...

    MySQL是开源免费和功能多面的小型数据库,MySQL也是目前流行通用的关系型数据库,已经被 Oracle 收购了.随着版本更新升级,加入一些高级功能,MySQL6.x 版本也开始收费.不过本教程将使 ...

  9. mysql快捷创建数据库_mysql数据库快速入门(1)

    1.数据库操作 1.1.连接mysql服务器 mysql -u root( 用户名 ) -p 1.2.退出mysql命令提示窗 exit 1.3.查看版本 SELECT VERSION(); 1.4. ...

  10. h2 mysql mode_H2 数据库快速入门

    目录: 关键词:H2 Database, 关系数据库, SQL, 内存数据库. H2 Database 是一个 Java 实现的关系型数据库,也是一个嵌入式数据库. 引入依赖 在 gradle 文件中 ...

最新文章

  1. android中XMl文件的读取
  2. POJ 3126 Prime Path BFS搜索
  3. Qt Charts基本组成
  4. centos6 利用外部的smpt服务器计划任务发送邮件
  5. 【mathematical statistics】2 point estimate
  6. Maven Fluido Skin和Javadoc类图
  7. (译) JSON-RPC 2.0 规范(中文版)
  8. niginx之虚拟主机和域名解析
  9. Single-page application
  10. 由遍历序列构造二叉树
  11. arm-linux启动,linux启动流程arm
  12. Centos 源码安装zabbix 2.4.5
  13. iterm2 配置安装rz sz
  14. snownlp抛出错误_9snowNLP常见用法
  15. 《老子五千言》 ——《道德经》帛书版(珍藏原著)
  16. html比较长的单词不自动换行,HTML+CSS 对于英文单词强制换行但不截断单词的解决办法...
  17. MySQL最全整理(面试题+笔记+导图),面试大厂不再被MySql难倒
  18. 2021-07-16 yarn Total VCores allocated for Containers 与服务器上cpu核数不一致原因
  19. 手机备份到底备份什么
  20. CAD基础+常用快捷(三)

热门文章

  1. 打印机无法打印测试页是什么原因
  2. 16个PLC入门基础知识,大学生学PLC就跟玩一样
  3. centos lnmp一键安装
  4. windows照片查看器没了_装机必备|Windows 上用得最爽的18款高效软件
  5. 艾宾浩斯英语单词记忆表格生成器
  6. 计算机运行时内存会超吗,我们不曾深纠的电脑技术 篇一:我们为什么要对内存进行超频?...
  7. 网络---协议(TCP/IP五层模型)
  8. 苹方字体 for linux,使用macOS苹方替换Windows 10微软雅黑
  9. AD15将PCB变为自己想要的形状
  10. idea实现Tomcat热部署