Flutter 26: 图解关乎 SQL 数据库的二三事 (一)

简介: 0 基础学习 Flutter:第二十六步:学习了解 SQL 的基本操作~

      小菜刚刚学习一下关于数据存储方面的小知识点,用 sqflite 对数据库进行基本操作。sqflite 为三方 pub 通用的引入方式。小菜仅对数据库的基本操作进行学习整理。

集成方式

  1. pubspec.yaml 中添加 sqflite: any
  2. 在相应的 .dart 文件中添加引用 import 'package:sqflite/sqflite.dart';
  3. 根据需求对数据存储进行具体的 SQL 操作,如下:

SQL 操作

1. 创建数据库

      sqflite 创建数据库时优先创建一个路径,用来存储数据库。注:对于数据库的操作都是耗时操作,都要通过 asyncawait 异步处理。

FlatButton(
    color: Colors.blue,
    child: Text('创建一个 flutter_app.db 数据库'),
    onPressed: () async {
      var databasesPath = await getDatabasesPath();
      path = join(databasesPath, 'flutter_app.db');
    }),

2. 创建数据表

      借助 db.execute 来创建一张数据表,跟普通的 SQL 方式相同。

FlatButton(
    color: Colors.blue,
    child: Text('创建一张 user 表'),
    onPressed: () async {
      db = await openDatabase(path, version: 1,
          onCreate: (Database db, int version) async {
        await db.execute(
            'CREATE TABLE User (id INTEGER PRIMARY KEY, name TEXT, age INTEGER, address TEXT)');
      });
    }),

3. 【增】插入数据

      借助 rawInsertdb.insert 对数据库表数据进行插入。根本上都是通过 insert into 方式插入数据表。

// db.transaction
_transactionOneUser(UserBean userBean) async {
  await db.transaction((txn) async {
    await txn.rawInsert(
        'INSERT INTO User(name, age, address) VALUES(${userBean.name}, '
        '${userBean.age},'
        '${userBean.address}'
        ')');
  });
}

// db.insert
_insertOneUser(var tableName, UserBean userBean) async {
  await db.insert(tableName, userBean.toMap());
}

4. 【查】查询数据

      借助 rawQuerydb.select 对数据库表信息进行查询,是操作最灵活对部分,配合各种 SQL 语句进行处理。

// db.rawQuery
Future<List<Map>> _getUserList() async {
  List<Map> list = await db.rawQuery('SELECT * FROM User');
  return list;
}

// db.query
Future<List<Map>> _getUserByName(var tableName, var name) async {
  List<Map> list =
      await db.query(tableName, where: 'name = ?', whereArgs: [name]);
  return list;
}

5. 【删】删除数据

      借助 rawDeletedb.delete 对数据库表进行数据删除,小菜测试删除 id = 0和1 的对应数据,sqflite 内部已处理好,若数据库表不存在也不会报异常。

// rawDelete
_deleteRawUserByID(int id) async {
  return await db.transaction((txn) async {
    await txn.rawDelete('DELETE FROM User WHERE id = ${id}');
  });
}

// db.delete
_deleteUserByID(var tableName, int id) async {
  return await db.delete(tableName, where: 'id = ?', whereArgs: [id]);
}

6. 【改】更新数据

      借助 rawUpdatedb.update 对数据库表进行内容数据更新,可根据需求变更固定字段或整条数据。

// rawUpdate
_updateRawUser(var userBean) async {
  return await db.transaction((txn) async {
    await txn.rawUpdate('UPDATE User SET address = "${userBean.address}" '
        'WHERE name = "${userBean.name}"');
  });
}

// db.update
Future<int> _updateUser(var tableName, var userBean) async {
  return await db.update(tableName, userBean.toMap(),
      where: 'name = ?', whereArgs: [userBean.name]);
}

7. 删除数据表

      小菜刚接触数据库,没有找到直接删除表的方式,没有类似 drop 的方法,如果有哪位大神了解请多多指导。注:若用如下方式只会删除当前表中所有数据而不会删除表。

onPressed: () async {
  await db.delete('User');
}

8. 删除数据库

      删除数据库与创建数据库相对应,直接对路径进行操作。

FlatButton(
    color: Colors.blue,
    child: Text('删除数据库', style: TextStyle(color: Colors.white)),
    onPressed: () async {
      await deleteDatabase(path);
    })

注意事项

  1. 建议在对数据库表进行增删改查前优先判断数据库是否存在,可统一封装方法以降低异常;
  2. 对于数据库表的增删改查,小菜使用了两种方式:一种是直接 db.增删改查,另一种是 db.transaction 后对回调 raw+增删改查,两种的区别是,第一种使用更便捷,可直接修改整条数据;第二种使用更灵活,可对部分数据字段进行调整,可以看图例中的【更新】结果;
  3. 在使用 db.transaction 对数据库表进行增删改查时要注意 SQL 语句的完整性,包括传递 String 类型参数时要加引号,执行的是一个完整的 SQL 语句。

      数据库的操作灵活多样,小菜刚刚尝试,本篇仅记录一下基本的使用情况,对于更多灵活的方法会继续尝试整理,有问题的地方请大家多多指导。

目录
相关文章
|
6天前
|
SQL 人工智能 算法
【SQL server】玩转SQL server数据库:第二章 关系数据库
【SQL server】玩转SQL server数据库:第二章 关系数据库
41 10
|
23天前
|
SQL 存储 BI
【软件设计师备考 专题 】数据库语言(SQL)
【软件设计师备考 专题 】数据库语言(SQL)
89 0
|
30天前
|
SQL 安全 数据库
SQL-Server 数据库部署
SQL-Server 数据库部署
56 0
|
27天前
|
SQL 数据库
sql server中创建数据库和表的语法
sql server中创建数据库和表的语法
17 1
|
6天前
|
SQL 算法 数据库
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
56 6
|
2天前
|
SQL 数据库
数据库SQL语言实战(二)
数据库SQL语言实战(二)
|
5天前
|
SQL 监控 数据库
数据库管理与电脑监控软件:SQL代码优化与实践
本文探讨了如何优化数据库管理和使用电脑监控软件以提升效率。通过SQL代码优化,如使用索引和调整查询语句,能有效提高数据库性能。同时,合理设计数据库结构,如数据表划分和规范化,也能增强管理效率。此外,利用Python脚本自动化收集系统性能数据,并实时提交至网站,可实现对电脑监控的实时性和有效性。这些方法能提升信息系统稳定性和可靠性,满足用户需求。
23 0
|
6天前
|
SQL 存储 数据挖掘
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
服务器数据恢复环境: 一台安装windows server操作系统的服务器。一组由8块硬盘组建的RAID5,划分LUN供这台服务器使用。 在windows服务器内装有SqlServer数据库。存储空间LUN划分了两个逻辑分区。 服务器故障&初检: 由于未知原因,Sql Server数据库文件丢失,丢失数据涉及到3个库,表的数量有3000左右。数据库文件丢失原因还没有查清楚,也不能确定数据存储位置。 数据库文件丢失后服务器仍处于开机状态,所幸没有大量数据写入。 将raid5中所有磁盘编号后取出,经过硬件工程师检测,没有发现明显的硬件故障。以只读方式将所有磁盘进行扇区级的全盘镜像,镜像完成后将所
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
|
13天前
|
数据库 SQL 索引
什么是数据库 SQL Execution Plan
什么是数据库 SQL Execution Plan
10 0
|
26天前
|
SQL 数据可视化 Apache
阿里云数据库内核 Apache Doris 兼容 Presto、Trino、ClickHouse、Hive 等近十种 SQL 方言,助力业务平滑迁移
阿里云数据库 SelectDB 内核 Doris 的 SQL 方言转换工具, Doris SQL Convertor 致力于提供高效、稳定的 SQL 迁移解决方案,满足用户多样化的业务需求。兼容 Presto、Trino、ClickHouse、Hive 等近十种 SQL 方言,助力业务平滑迁移。
阿里云数据库内核 Apache Doris 兼容 Presto、Trino、ClickHouse、Hive 等近十种 SQL 方言,助力业务平滑迁移