上一篇讲了文件存储path_provider的使用,今天接着学习第三种数据存储方式:Sqlite3。在Flutter中的数据库叫Sqflite跟原生安卓的Sqlite叫法不一样。我们来看下Sqflite官方对它的解释说明:

SQLite plugin for Flutter. Supports both iOS and Android.Support transactions and batchesAutomatic version managment during openHelpers for insert/query/update/delete queriesDB operation executed in a background thread on iOS and Android

Sqflite的使用

通过上面的描述,我们了解到Sqflite是一个同时支持Android跟Ios平台的数据库,并且支持标准的CURD操作,下面我们还是用上面操作文件跟sp的代码逻辑是一块体验一下Sqflite。

同样需要引入依赖:

  #添加Sqflite依赖sqflite: ^1.0.0

然后命令行执行flutter packages get 完成后如下:

数据存取示例

模拟场景:

利用Sqflite创建一张user表,其中user表中id设置为主键id,且为自增长,name字段为text类型,用户按下存储按钮后,把TextFile输入框里的内容插入到user表中,当按下获取按钮时,取出数据库中最后一条数据显示在下方Text上,并且显示出当前数据库中一共有多少条数据,以及数据库的存储路径。

效果图:

终端输出: 我存了4次,所以有四个输出。

I/flutter (28891): ----------------[{id: 1, name: userlzz}, {id: 2, name: userlzz1}]I/flutter (28891): ----------------[{id: 1, name: userlzz}, {id: 2, name: userlzz1}, {id: 3, name: userlzz2}]I/flutter (28891): ----------------[{id: 1, name: userlzz}, {id: 2, name: userlzz1}, {id: 3, name: userlzz2}]I/flutter (28891): ----------------[{id: 1, name: userlzz}, {id: 2, name: userlzz1}, {id: 3, name: userlzz2}, {id: 4, name: userlzz3}]

示例代码

import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
import 'package:sqflite/sqflite.dart';class SqfliteTest extends StatefulWidget {SqfliteTest({Key key, this.title}) : super(key: key);final String title;@overridecreateState() => new _SqfliteTestState();
}class _SqfliteTestState extends State<SqfliteTest> {var _textFieldController = new TextEditingController();var _storageString = '';/*** 利用Sqflite数据库存储数据*/saveString() async {final db = await getDataBase('my_db.db');//写入字符串print('user 是表名!!');db.transaction((trx) {trx.rawInsert('INSERT INTO user(name) VALUES("${_textFieldController.value.text.toString()}")');});}/*** 获取存在Sqflite数据库中的数据*/Future getString() async {final db = await getDataBase('my_db.db');var dbPath = db.path;setState(() {db.rawQuery('SELECT * FROM user').then((List<Map> lists) {print('----------------$lists');var listSize = lists.length;//获取数据库中的最后一条数据_storageString = lists[listSize - 1]['name'] +"\n现在数据库中一共有${listSize}条数据" +"\n数据库的存储路径为${dbPath}";});});}/*** 初始化数据库存储路径*/Future<Database> getDataBase(String dbName) async {//获取应用文件目录类似于Ios的NSDocumentDirectory和Android上的 AppData目录final fileDirectory = await getApplicationDocumentsDirectory();//获取存储路径final dbPath = fileDirectory.path;//构建数据库对象Database database = await openDatabase(dbPath + "/" + dbName, version: 1,onCreate: (Database db, int version) async {await db.execute("CREATE TABLE user (id INTEGER PRIMARY KEY, name TEXT)");});return database;}@overrideWidget build(BuildContext context) {return new Scaffold(appBar: new AppBar(title: new Text('数据库Sqflite'),),body: new Column(children: <Widget>[SizedBox(height: 5,),Text("数据库Sqflite存储", textAlign: TextAlign.center,style: TextStyle(fontSize: 28,color: Colors.deepOrange),),Container(padding: EdgeInsets.all(10),height: 58,child: TextField(controller: _textFieldController,style: TextStyle(fontSize: 28),),),MaterialButton(onPressed: saveString,child: new Text("存储",style: TextStyle(color: Colors.white,fontSize: 22),),color: Colors.lightBlueAccent,),MaterialButton(onPressed: getString,child: new Text("获取",style: TextStyle(color: Colors.white,fontSize: 22),),color: Colors.lightGreen,),SizedBox(height: 15,),Text('存储的值为:$_storageString',style: TextStyle(fontSize: 22,color: Colors.deepOrange)),],),);}
}

至此,三种最常用的数据存储方式讲完了,要想在实战使用,还需要多加练习。

Flutter开发之数据存储-3-数据库存储(34)相关推荐

  1. 安卓内部存储之数据库存储

    安卓内部存储数据有多种方式,其中就有利用SQLite数据库存储的,今日这篇文章就来说说如何实现数据库存储? 一般我们实现数据库存储,主要做两件事情, 第一件事情是创建一个数据库,并且定义好我们想要的表 ...

  2. Flutter开发之数据存储-2-文件存储(33)

    数据存储部分在移动开发中是非常重要的部分,无论是一些轻量级的数据(如用户信息.APP配置信息等)还是把需要长期存储的数据写入本地文件或者Sqlite3.都离不开数据存储,上一篇SharedPrefer ...

  3. Flutter开发之数据存储-1-SharedPreferences(32)

    前面讲了很多控件的文章,网络部分也讲了3篇了,图片部分也已经讲过.数据存储部分在移动开发中是非常重要的部分,无论是一些轻量级的数据(如用户信息.APP配置信息等)还是把需要长期存储的数据写入本地文件或 ...

  4. 现在后端开发都在用什么数据库存储数据?

    正文: 1.Oracle:传统行业,尤其是政府,医疗,学校和大企业,基本上还是Oracle应用最广,其次就是DB2.反而是WebLogic和WebSphere这些中间件基本上随着经典javaee的没落 ...

  5. Android官方开发文档Training系列课程中文版:数据存储之数据库存储

    原文地址:http://android.xsoftlab.net/training/basics/data-storage/databases.html 对于保存重复的结构化的数据最理想的方式就是存到 ...

  6. [Android Studio]Android 数据存储--SQLite数据库存储

  7. Android --- SharePreference 存储与数据库存储的效率分析

    原文链接:https://blog.csdn.net/MacaoPark/article/details/114680449 前言 最近到了一家公司,跟一个同事做项目,比如常规的一些操作用Shared ...

  8. 文件存储与数据库存储

    在大多数企业开发或Web开发中,都会涉及数据的存储和检索.存储数据有两种基本的方法:保存到普通文件中(File System),或者保存到数据库(Database)中. 文件存储常见,并且简单,操作系 ...

  9. 若依前后端分离版源码分析-前端头像上传后传递到后台以及在服务器上存储和数据库存储设计

    场景 使用若依前后端分离版本时,分析其头像上传机制. 可作为续参考学习. 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获 ...

最新文章

  1. 【jdk源码分析】ArrayList的size()==0和isEmpty()
  2. windows下mysql安装配置启动
  3. MySQL relay log 详细参数解释
  4. [转载] Python新手写出漂亮的爬虫代码1——从html获取信息
  5. 【转】应聘时最漂亮的回答
  6. MySQL定时备份数据库方案(全库备份)
  7. 利用hasOwnProperty实现的高效的javascript hashtable
  8. php合成图片系统,php图片合成
  9. 关于Zxing生成DM二维码变形问题总结
  10. 用最火的python实现最常用、最靓、最实用图表~~
  11. 简单的html练习:实现超好看唯美浪漫的文字边框卡片
  12. ipad上编译运行代码_是否可以在iPad上编写和运行PHP代码?
  13. vue 点击图标 显示/隐藏 密码
  14. html 走马看花还有vb,走马看花的故事
  15. 苹果手机软件闪退怎么解决_王者荣耀筑梦祈愿闪退设备不支持怎么办 王者荣耀筑梦祈愿闪退设备不支持解决方法...
  16. jq.ajax+php+mysql实现瀑布流缓冲加载数据
  17. Cadence中的电路设计
  18. windows xp 系统CMD命令大全
  19. kettle安装、使用、部署总结
  20. 字节跳动+京东+360+网易面试题整理,移动架构师成长路线

热门文章

  1. Git 2.18版本发布:支持Git协议v2,提升性能
  2. java关键字和保留字整合(不定期补充) 转自小码哥
  3. pfSense book之硬件配置指南
  4. Android OkHttp(1)
  5. linux系统启动级别
  6. url-pattern配置
  7. 偷懒日志 - 自动生成代码 - 第二步 生成POJO
  8. NotePad++ 相关插件
  9. Nginx 路由--Location的使用
  10. CentOS 7下安装Nextcloud搭建个人网盘