flutter对sqflite插件的简单使用增删改查

2024-01-04

首先用到的插件在pubspec.yaml 里面的版本号

  sqflite: ^2.3.0
  path: ^1.8.3

然后我们封装一个数据库的增删改查的类
需要使用的话直接把下面代码移植,可直接使用,仅需要修改创建表的内容和自己插入的数据

/// sqflite封装
class DatabaseHelper {
  static Database? _database;
  static const String dbName = 'user_database.db';
  static const String tableName = 'user_table';

  Future<Database> get database async {
    if (_database != null) return _database!;

    // 如果数据库尚未初始化,则初始化数据库
    _database = await initDatabase();
    return _database!;
  }

  Future<Database> initDatabase() async {
    String path = join(await getDatabasesPath(), dbName);
    return await openDatabase(path, version: 1, onCreate: _createTable);
  }

  Future<void> _createTable(Database db, int version) async {
    await db.execute('''
      CREATE TABLE $tableName (
        id INTEGER PRIMARY KEY, 
        username TEXT,
        email TEXT,
        gender TEXT,
        birthday TEXT,
        password TEXT
      )
    ''');
   //INTEGER PRIMARY KEY 的语法表示创建一个整数类型的主键,并且会自动递增
  }

  /// 插入用户 return 插入的id
  Future<int> insertUser(Map<String, dynamic> user) async {
    Database db = await database;
    return await db.insert(tableName, user);
  }

  /// 获取所有用户
  Future<List<Map<String, dynamic>>> getAllUsers() async {
    Database db = await database;
    return await db.query(tableName);
  }

  /// 根据用户名查询用户
  Future<List<Map<String, dynamic>>> getUserByUsername(String username) async {
    Database db = await database;
    return await db
        .query(tableName, where: 'username = ?', whereArgs: [username]);
        //where的参数应该和whereArgs的参数相对应,放着sql被注入
  }

  /// 更新用户信息
  Future<int> updateUser(Map<String, dynamic> user, int userId) async {
    Database db = await database;
    return await db
        .update(tableName, user, where: 'id = ?', whereArgs: [userId]);
  }

  /// 删除用户
  Future<int> deleteUser(int userId) async {
    Database db = await database;
    return await db.delete(tableName, where: 'id = ?', whereArgs: [userId]);
  }
}

下面是flutter的页面对sqflite的简单测试使用,可成功跑通


class RegistrationPage extends StatelessWidget {
  final DatabaseHelper dbHelper = DatabaseHelper();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('sql轻量级使用'),
      ),
      body: Center(
        child: Column(
          children: [
            const SizedBox(height: 50),
            ElevatedButton(
              onPressed: () async {
                await _insertUser();
              },
              child: const Text('增加用户(增)'),
            ),
            const SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                // await _getAllUsers();
                await _getUsersInfo('李');
              },
              child: const Text('打印所有用户(查)'),
            ),
            const SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                dbHelper.deleteUser(1);
              },
              child: const Text('删除指定id用户(删)'),
            ),
            const SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                Map<String, dynamic> userChange = {
                  'username': '李',
                  'email': '2323111232@qq.com',
                  'gender': 'Male',
                  'birthday': '1998-01-01',
                  'password': '123412345',
                };
                await dbHelper.updateUser(userChange, 2020);
              },
              child: const Text('修改指定id用户数据(改)'),
            ),
          ],
        ),
      ),
    );
  }
  ///插入数据进表
  Future<void> _insertUser() async {
    Map<String, dynamic> user = {
      'username': 'JohnDoe',
      'email': 'john.doe@example.com',
      'gender': 'Male',
      'birthday': '1990-01-01',
      'password': 'secure_password',
    };

    int userId = await dbHelper.insertUser(user);
    print('Inserted user with ID: $userId');
  }

  ///打印所有表中信息
  Future<void> _getAllUsers() async {
    List<Map<String, dynamic>> users = await dbHelper.getAllUsers();
    print('All Users:');
    for (var user in users) {
      print(
          'ID: ${user['id']}, Username: ${user['username']}, Email: ${user['email']}, Birthday: ${user['birthday']}, Gender: ${user['gender']}');
    }
  }

  ///查找指定username的信息
  Future<void> _getUsersInfo(String userName) async {
    List<Map<String, dynamic>> userInfo =
        await dbHelper.getUserByUsername(userName);
    for (var user in userInfo) {
      print(
          'ID: ${user['id']}, Username: ${user['username']}, Email: ${user['email']}, Birthday: ${user['birthday']}, Gender: ${user['gender']}');
    }
  }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

flutter对sqflite插件的简单使用增删改查 的相关文章

  • Flutter MacOs 访问文件

    我正在尝试在 Flutter 中构建一个自定义桌面应用程序 以便能够加载图片 例如图库 为此 我将要求用户选择一个文件夹 它会自动显示图片 现在 从简单的事情开始 由于这是第一次为 Mac 开发 我只是尝试通过Image file new
  • Flutter 中 `Future.delayed(Duration.zero, ...)` 和 `SchedulerBinding.instance.addPostFrameCallback(...)` 有什么区别?

    正如所见https stackoverflow com a 49458289 5150593 https stackoverflow com a 49458289 5150593 本质上有两种访问方式BuildContext最初在 Flut
  • 将原生 Twilio Android SDK 与 Flutter 集成

    我正在尝试使用 flutter 创建 IP 语音 VOIP 移动应用程序 我还没有看到 twilio 语音 api 的 flutter 插件的实现 所以我使用 MethodChannel 将我的应用程序与本机 android 语音 api
  • 如何在 Flutter 中更新 AnimatedList 中的数据

    如何在 Flutter 中更新 AnimatedList 中的数据 添加 删除行 我可以在 ListView 中通过更新支持数据并调用来完成此操作setState 例如 setState data insert 2 pig 不过 在 Ani
  • 如何在flutter中实现字母滚动

    有没有任何插件或方法可以在 flutter 中实现这种滚动 具体来说 右侧的字母列 例如突出显示当前字母表字母 或者如果点击某个字母 则滚动视图会直接转到该字母标题 为了按字母顺序排序 我们可以这样做List sort 对于粘性标题 我们也
  • 如何使用全局 Key 从 Flutter 中的另一个小部件更新小部件状态?

    I have a main widget screen contain two main widgets a Header marked with red and a list marked with purple here is my c
  • 如何根据数据值过滤flutter中的Hive数据?

    在颤振中 我使用ValueListenableBuilder用于获取配置单元数据列表的小部件 我正在尝试按数据值过滤数据 例子 Key 1 name value mydata1 des value mydescription1 value
  • 在 flutter 中将 JSON 解析为 Map

    我收到后端的响应 measurements pm10 name pm10 value 20 8647 unit g m pm25 name pm10 value 20 8647 unit g m o2 name pm10 v
  • 带 NestedScrollview 的 RefreshIndicator

    我想要 2 个带有 ListView 的选项卡页共享一个 RefreshIndicator 但是 RefreshIndicator 必须具有 Scrollable 作为子级 TabBarView 则不然 因此我尝试为每个选项卡创建 2 个
  • 带有 ListTiles 和按钮行的 Flutter 下拉菜单

    我正在尝试构建一个自定义下拉菜单 如下所示 我已经成功地实现了ListTiles and Row of Buttons没有下拉菜单 但我不确定如何将所有内容嵌套在下拉菜单类中 这是我到目前为止所得到的 class HomePage exte
  • 如何使用低权限的 PL-SQL 获取 Oracle 中的列数据类型?

    我对 Oracle 数据库中的一些表具有 只读 访问权限 我需要获取某些列的架构信息 我想使用类似于 MS SQL 的东西sp help 我看到此查询中列出了我感兴趣的表 SELECT FROM ALL TABLES 当我运行这个查询时 O
  • 没有脚手架的 DefaultTabController?

    我正在尝试使用DefaultTabController在一些小部件的中间 所以我的TabBar不能在AppBar并且必须关闭一些小部件 所以我的问题是当我使用时TabBarView它崩溃了 这是一个 Flutter 示例的示例 但没有找到如
  • Oracle - 获取星期几

    今天是星期二 为什么当我运行这个 SQL 语句时 它说今天不是星期二 SELECT CASE WHEN TO CHAR sysdate Day Tuesday THEN Its Tuesday ELSE Its Not Tuesday EN
  • 如何从 BottomNavigationBar 中删除图标?

    我只需要 BottomNavigationBarItem 中的标签 但我找不到删除它们的方法 您可以隐藏标签showSelectedLabels and showUnselectedLabels设置为 false 但图标没有等效项 构造函数
  • 如何在flutter中绕过SSL证书验证?

    如何在flutter中绕过SSL证书验证 错误 握手异常 客户端中的握手错误 操作系统错误 CERTIFICATE VERIFY FAILED 自签名证书 handshake cc 345 您需要配置 HttpService 以使用自签名
  • 如何修复 webview_flutter 中的白屏?

    运行 webview flutter 示例应用程序 https github com flutter plugins tree master packages webview flutter example https github com
  • Flutter - 构建失败并出现异常

    当我启动我的应用程序时 我收到此错误消息 自上次运行以来我没有进行任何更改 当时一切都很好 有人知道如何解决这个问题吗 谢谢 FAILURE Build failed with an exception 什么地方出了错 无法确定任务 app
  • 使用 Flutter 基础类型而不使用 Flutter

    我需要在没有 Flutter 的环境中使用 lib package flutter foundation dart 中存在三种类型 他们是 ByteData ReadBuffer and WriteBuffer 是否可以在不依赖整个 Flu
  • 如何在 Flutter Provider 中删除 StreamController 中的数据?

    我正在使用provider来构建我的应用程序 因此数据被添加到StreamController中 每次刷新我的应用程序时 它都会调用API 然后将数据推送到StreamController 问题是如何在替换之前删除数据新的那一个 contr
  • 自定义卡片形状 Flutter SDK

    我在 Flutter 上使用 GridView 开发了一个应用程序 GridView 项目是卡片 默认卡片形状是半径为 4 的矩形 我知道 Card Widget 有 shape 属性 并且它需要 ShapeBorder 类 但我无法找到如

随机推荐

  • GHM-XGBOOST模型的学习和理解

    Gradient Harmonized Margins GHM GHM 是一种损失函数 主要用于解决类别不平衡问题 GHM 损失函数能够关注较难的样本 对于容易的样本降低权重 从而在训练过程中更好地平衡了损失 这有助于提高模型对于少数类别的
  • SQL查询 字符串数据

    查询房屋特色 例如 1 2 3 多个 字符串 tag ids this gt request gt param tag ids s if tag ids arr explode tag ids tag ids map arr foreach
  • web前端学习怎么能快速入门

    Web前端开发是一个热门的职业领域 很多人都希望能够快速入门并掌握相关技能 下面将从制定学习计划 项目实战案例练习 以用为学 与培训班老师多交流 自主学习能力的培训等5个方面详细介绍如何在web前端培训班学习 1 制定web前端学习计划 在
  • 在Java培训班怎么学习?这5个学习技巧送给你

    在Java培训班学习Java编程语言是一个很好的学习平台 但是如何更有效地学习呢 下面我将为大家介绍5个学习技巧 希望能帮助到大家 Java是一种面向对象的编程语言 被广泛应用于企业级应用开发 移动应用开发 大数据处理等领域 学习Java编
  • 培训学习大数据知识有哪些方法

    学习大数据知识是当前非常热门的话题 随着大数据技术的不断发展 越来越多的人开始关注并学习大数据知识 在大数据培训班学习大数据知识是一个非常好的选择 下面我将从制定大数据学习计划 项目实战案例练习 以用为学 与培训班老师多交流等四个方面来详细
  • 旧硬盘插电脑上显示要初始化怎么办?了解原因和解决方案

    在使用旧的硬盘插入电脑时 有时会遇到需要进行初始化的情况 这种情况可能是由于多种原因引起的 而初始化硬盘将会导致所有数据丢失 给用户造成不便和损失 因此 本文将介绍解决旧硬盘需要初始化的问题的方法 并提供一些建议来帮助读者避免数据丢失 一
  • Linux配置Acado

    如果需要使用acado的matlab接口 请移步 Linux Matlab配置Acado 首先 安装必要的软件包 sudo apt get install gcc g cmake git gnuplot doxygen graphviz 在
  • APK 瘦身

    APK 瘦身的主要原因是考虑应用的下载转化率和留存率 应用太大了 用户可能就不下载了 再者 因为手机空间问题 用户有可能会卸载一些占用空间比较大的应用 所以 应用的大小也会影响留存率 1 APK 的结构 包含以下目录 assets 包含了应
  • 信息: 没有运行的任务匹配指定标准。

    文章 前言 错误场景 问题分析 解决方案 后言 前言 他们是天生勇敢的开发者 我们创造bug 传播bug 毫不留情地消灭bug 在这个过程中我们创造了很多bug以供娱乐 前端bug 这里是博主总结的一些前端的bug以及解决方案 感兴趣可以看
  • Centos8破解Root密码

    注 Centos7同理 1 重启Centos8系统后 在启动页面中选中第一行 按 e 键进入界面 2 找到linux开头所在行的找到 ro 改为上 rw init sysroot bin bash 同时按下 Ctrl X 跳转到紧急模式 3
  • 前端push.js桌面通知库

    push js 官网 https pushjs org 安装 1 npm 安装方式 npm install push js save 2 script引入方式 使用 1 获取用户许可 用户需要先授予权限才能发送通知 Push Permiss
  • [大厂实践] 零配置服务网格与按需集群发现

    本文介绍了Netflix通过扩展Envoy支持按需集群发现机制帮助团队无缝迁移服务网格的实践 原文 Zero Configuration Service Mesh with On Demand Cluster Discovery 在这篇文章
  • 使用vue实现一个网页的贴边组件。

    使用vue实现一个网页的贴边组件 先来看效果 2024 01 04 10 46 22 https www haolu com share V00O6HWYR8 36207fc21c35b2a8e09bf22787a81527 下面是具体代码
  • Golang拼接字符串性能对比

    g o l a n g golang g o l an g
  • 【每日一题】2397. 被列覆盖的最多行数-2024.1.4

    题目 2397 被列覆盖的最多行数 给你一个下标从 0 开始 大小为 m x n 的二进制矩阵 matrix 另给你一个整数 numSelect 表示你必须从 matrix 中选择的 不同 列的数量 如果一行中所有的 1 都被你选中的列所覆
  • 1.69寸SPI接口240*280TFT液晶显示模块使用中碰到的问题

    1 69寸SPI接口240 280TFT液晶显示模块使用中碰到的问题说明并记录一下 在网上买了1 69寸液晶显示模块 使用spi接口 分辨率240 280 给的参考程序是GPIO模拟的SPI接口 打算先移植到FreeRtos测试 再慢慢使用
  • 2024肥晨赠书活动第一期:《实战AI大模型》

    文章目录 编辑推荐 关于 实战AI大模型 作者简介 目录 前言 序言 本书内容安排如下 实战AI大模型 全书速览 结束语 编辑推荐 人工智能领域资深专家尤洋老师倾力打造 获得了李开
  • mysql忘记密码的三种解决方案

    1 修改密码的三种方式 mysql用户分为root用户 超级管理员 拥有所有权限 和普通用户 mysql服务器通过权限表来控制用户对数据库的访问 这些权限表存于root用户下的mysql数据库中 在使用mysql数据库过程中 往往需要修改密
  • Shell - 遍历目录的函数封装

    bin bash traverse directory local dir 1 for file in dir do if d file then traverse directory file else echo file fi done
  • flutter对sqflite插件的简单使用增删改查

    首先用到的插件在pubspec yaml 里面的版本号 sqflite 2 3 0 path 1 8 3 然后我们封装一个数据库的增删改查的类 需要使用的话直接把下面代码移植 可直接使用 仅需要修改创建表的内容和自己插入的数据 sqflit