当前位置: 首页 > news >正文

通过一个本地存草稿的示例记录sqflite的使用

方便日后工作中进行参考,所以对此进行记录如下,首先要在dart文件中引入必须的核心三方:

import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
import 'package:sqflite/sqflite.dart';

然后创建一个类,取名 DraftsDB,首先要初始化本数据库:

  String table = 'drafts_box'; // 表名static final DraftsDB _instance = DraftsDB._init();static Database? _database;factory DraftsDB() => _instance;DraftsDB._init();/// 异步获取或创建数据库Future<Database?> get database async {if (_database != null) return _database;_database = await _initDB();return _database;}/// 数据库初始化Future<Database> _initDB() async {Directory documentsDirectory = await getApplicationDocumentsDirectory();String path = join(documentsDirectory.path, '$table.db');return await openDatabase(path,version: 1,onCreate: _onCreate,);}/// 初创建草稿箱表Future<void> _onCreate(Database db, int version) async {await db.execute('''CREATE TABLE IF NOT EXISTS $table (id INTEGER PRIMARY KEY AUTOINCREMENT, phone TEXT NOT NULL UNIQUE,pass_word TEXT NOT NULL,title TEXT,times INTEGER NOT NULL);''');}

创建表时的phone TEXT NOT NULL UNIQUE,中的UNIQUE是禁止重复的手机号插入。

然后是插入数据的方法:

/// 插入数据Future<int> insert({required String phone,required String passWord,String? text,}) async {final db = (await database)!;return await db.insert(table,{'phone': phone,'pass_word': passWord,'text':text,'times': DateTime.now().millisecondsSinceEpoch ~/ 1000,},conflictAlgorithm: ConflictAlgorithm.replace,);}

插入方法中的conflictAlgorithm: ConflictAlgorithm.replace,是可以替换的意思。更新的方法:

Future<int> updatePass({required int id,required String phone,required String passWord,}) async {final db = (await database)!;return await db.update(table,{'phone': phone,'pass_word': passWord,'times': DateTime.now().millisecondsSinceEpoch ~/ 1000,},where: 'id = ?',whereArgs: [id],);}

 检查是否存在符合条件的数据:

Future<bool> exists(int id) async {final db = (await database)!;final result = await db.rawQuery('''SELECT COUNT(*) AS count FROM $table WHERE id = ?''', [id]);final count = Sqflite.firstIntValue(result) ?? 0;return count > 0;}

获取本地所有数据,并按时间倒序排列

Future<List<Map<String, dynamic>>> getAllRecord() async {final db = (await database)!;return await db.query(table, orderBy: 'times DESC');}

分页查询数据:

/// 分页查询数据Future<List<Map<String, dynamic>>> queryPage(int page) async {final db = (await database)!;final offset = (page - 1) * 10;List<Map<String, dynamic>> res = await db.query(table,limit: 10,offset: offset, // 跳过前 offset 条数据orderBy: 'times DESC',);return res;}

删除符合条件的查询记录:

Future<bool> delete(int id) async {final db = (await database)!;final count =await db.delete(table, where: 'id = ?', whereArgs: [id]);return count > 0;}

 清空表里所有数据:

Future<int> clearAll() async {final db = (await database)!;return await db.delete(table);}

把这些方法记录下来方便以后查阅! 

相关文章:

  • 国债与企业债:稳健与高收益的债券选择
  • 用Woot助力Prime Day
  • Java + Spring Boot + MyBatis 事务注解 @Transactional 使用规范说明
  • Excel文件数据的读取和处理方法——C++
  • 无需 Mac,使用Appuploader简化iOS上架流程
  • 网络安全之框架安全漏洞分析
  • DeepSpeed 是一个深度学习优化库,使分布式训练和推理变得简单、高效和有效
  • 如何将SeaTunnel MySQL-CDC与Databend 高效整合?格式与方案全解析
  • STM32单片机独立看门狗IWDG使用CubeMX配置方法
  • [docker]--解析 Docker 镜像拉取日志:状态与分层拉取逻辑
  • 【LangChain】3 模型链
  • 阿里1688 普通 231滑块 x82 分析
  • 【Python3教程】Python3基础篇之面向对象
  • 【Docker基础】Docker核心概念:镜像(Image)详解
  • 知名开源项目被收购,用户发现项目被“投毒”
  • 西安java面试总结1
  • Oracle日志体系和遇到问题后日志排查路径
  • 中位数聚合与联邦平均的原理,作用,使用到联邦学习的哪个地方,与联邦学习数据隐私的联系
  • 安卓上架华为应用市场、应用宝、iosAppStore上架流程,保姆级记录(1)
  • 把下载的ippicv.tgz放入<opencv_build_dir>/3rdparty/ippicv/download/中cmake依然无法识别
  • 保定网站建设解决方案/seo全网优化指南
  • 深圳的网站建设公司哪家好/西安危机公关公司
  • 做网站要多少像素/seo关键技术有哪些
  • 兼职网站项目建设报告(完整版)/宁波seo关键词排名
  • 辽宁省住房和城乡建设厅网站/爱站网关键字挖掘
  • 大庆医院网站建设方案/推广品牌的策划方案