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

Flutter中sqflite的使用案例

目录

引言

安装sqflite

创建表

查询数据

添加数据

删除数据

更新数据

完整使用案例


引言

 随着移动应用的发展,本地数据存储成为了一个不可或缺的功能。在Flutter中,sqflite 是一个非常流行且强大的SQLite插件,它允许开发者在移动设备上轻松地进行数据库操作。本文将通过具体的使用案例,详细介绍如何在Flutter项目中集成和使用 sqflite 进行数据存储和查询。

安装sqflite

首先,你需要在 pubspec.yaml 文件中添加 sqflite 依赖: 

dependencies:flutter:sdk: fluttersqflite: ^2.3.3+1

然后运行 flutter pub get 来安装依赖,或者直接执行下面的命令

flutter pub add sqflite

创建表

// 创建表Future<void> _onCreate(Database db, int version) async {await db.execute('''CREATE TABLE Domain (id INTEGER PRIMARY KEY AUTOINCREMENT,url TEXT)''');}

查询数据

// 查看表的数据Future<List<Map<String, dynamic>>> getItemsFromTable() async {Database db = await database;return await db.query("Domain");}
// 查看存在某一条数据Future<bool> checkIfQrExists(String url) async {Database db = await database;List<Map<String, dynamic>> results = await db.query('Domain',where: 'url= ?',whereArgs: [url],);return results.isNotEmpty;}

添加数据

Future<void> insertDomain(String url) async {Database db = await database;await db.insert('Domain', {'url': url,});}

删除数据

Future<void> deleteUrl(String url) async {final db = await database;await db.delete('Domain',where: 'url = ?',whereArgs: [url],);
}

更新数据

Future<void> updateUrl(Map<String, dynamic> domain, String url) async {final db = await database;await db.update('Domain',domain,where: 'url = ?',whereArgs: [url],);
}

完整使用案例

import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';class DatabaseHelper {static final DatabaseHelper _instance = DatabaseHelper._internal();factory DatabaseHelper() => _instance;static Database? _database;static const int databaseVersion = 2;DatabaseHelper._internal();Future<Database> get database async {if (_database != null) return _database!;_database = await _initDatabase();return _database!;}Future<Database> _initDatabase() async {// 初始化操作String path = join(await getDatabasesPath(), 'app_database.db');return await openDatabase(path,version: databaseVersion,onCreate: _onCreate,onUpgrade: _onUpgrade,);}// 创建表Future<void> _onCreate(Database db, int version) async {await db.execute('''CREATE TABLE Domain (id INTEGER PRIMARY KEY AUTOINCREMENT,url TEXT)''');}Future<void> _onUpgrade(Database db, int oldVersion, int newVersion) async {print("版本号为$oldVersion");if (oldVersion < 2) {// 更新数据库的操作}}// 查看表的数据Future<List<Map<String, dynamic>>> getItemsFromTable() async {Database db = await database;return await db.query("Domain");}// 查看存在某一条数据Future<bool> checkIfQrExists(String url) async {Database db = await database;List<Map<String, dynamic>> results = await db.query('Domain',where: 'url= ?',whereArgs: [url],);return results.isNotEmpty;}// 增加一条数据Future<void> insertDomain(String url) async {Database db = await database;await db.insert('Domain', {'url': url,});}// 更新一条数据Future<void> updateUrl(Map<String, dynamic> domain, String url) async {final db = await database;await db.update('Domain',domain,where: 'url = ?',whereArgs: [url],);}
}

使用时

  DatabaseHelper dbHelper = DatabaseHelper();Future<void> getDatabaseData() async {List<Map<String, dynamic>> data = await dbHelper.getItemsFromTable();for (var item in data) {print('Item: ${item.toString()}');}}

http://www.lryc.cn/news/488597.html

相关文章:

  • 【2024 Optimal Control 16-745】【Lecture 2】integrators.ipynb功能分析
  • 【linux】ubuntu下常用快捷键【笔记】
  • 【Linux】常用命令练习
  • 力扣-Hot100-数组【算法学习day.37】
  • 表格不同类型的数据如何向量化?
  • 成都栩熙酷,电商服务新选择
  • 【java基础】微服务篇
  • 【LLM训练系列02】如何找到一个大模型Lora的target_modules
  • uni-app快速入门(八)--常用内置组件(上)
  • 基于Amazon Bedrock:一站式多模态数据处理新体验
  • FAX动作文件优化脚本(MAX清理多余关键帧插件)
  • Chapter 2 - 16. Understanding Congestion in Fibre Channel Fabrics
  • mysql数据库(六)pymysql、视图、触发器、存储过程、函数、流程控制、数据库连接池
  • RFdiffusion EuclideanDiffuser类解读
  • Flutter实现气泡提示框学习
  • vue3 路由守卫
  • 【MATLAB源码-第218期】基于matlab的北方苍鹰优化算法(NGO)无人机三维路径规划,输出做短路径图和适应度曲线.
  • 如何控制自己玩手机的时间?两台苹果手机帮助自律
  • 【java-Neo4j 5开发入门篇】-最新Java开发Neo4j
  • Python的3D可视化库 - vedo (1)简介和模块功能概览
  • 全面解析:HTML页面的加载全过程(一)--输入URL地址,与服务器建立连接
  • elasticsearch的倒排索引是什么?
  • Ubuntu VNC Session启动chromium和firefox报错
  • 【Tealscale + Headscale + 自建服务器】异地组网笔记
  • C++ 编程基础(8)模版 | 8.2、函数模版
  • Android Studio音频视频播放器课程设计
  • 速盾:CDN是否支持屏蔽IP?
  • 机器学习—学习曲线
  • 在 macOS 和 Linux 中,波浪号 `~`的区别
  • 【Java】实战:多数元素