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

Qt数据库

目录

  • 数据库简介
  • SQLite数据库
    • SQLite主要特性
    • SQLite的操作指令
      • SQLite命令行程序(SQL语句)
  • 在Qt中使用SQLite

数据库简介

  • 数据库是指以一定方式存储在一起,能为多个用户共享,具有尽可能小的冗余特性,是与应用程序彼此独立的数据集合。
  • 相关术语
    • DB 数据库(database)
    • DBMS 数据库管理系统
    • DBA 数据库管理员
    • RDB 关系型数据库
  • 数据库操作语言
    • SQL(Structured Query Language)是一种针对数据库的结构化查询语言,用于实现数据库查询和程序设计,常用于关系数据库系统,实现数据存取、查询、更新等操作。
  • 常用的SQL语句
    • 数据操作语言(DML):SELECT、INSERT、DELETE、UPDATE
    • 数据定义语言(DDL):CREATE TABLE

SQLite数据库

  • SQLite是一个轻量级的开源数据库,源代码安全公开不受版权限制,实现了自给自足的、无服务器、零配置的SQL数据库引擎,也是广泛使用的关系型数据库。
  • SQLite引擎不是程序与之通信的独立进程,而是以静态库或共享库的方式连接到程序中,其不同于客户-服务器 数据库连接方式,主要的使用方法是在编程语言内直接API调用。当前主流的编程语言,如C/C++、java、python等都提供了sqlite操作的API接口。
  • SQLite在资源消耗、实时性和可操作性有着出色的表现,整个数据库(定义、表、索引、数据库本身)都在宿主主机上存储在一个单一的文件中,通常SQLite的工作是在开始一个事务的时候锁定整个数据文件而实现。

SQLite主要特性

  • SQLite不需要一个单独的服务器进程或操作的系统(无服务器的)
  • SQLite可以不用配置,安装或管理十分简单
  • SQLite数据库是存储在一个单一的跨平台的磁盘文件
  • SQLite是非常小的、轻量级的,完全配置时小于400KiB,省略可选功能配置时小于250KiB
  • SQLite是自给自足的,开发者不需要任何外部的依赖
  • SQLite支持SQL92标准的大多数查询语言的功能
  • SQLite事务是完全兼容ACID的,允许从多个进程或线程安全访问

SQLite的操作指令

  • 进入SQLite的命令行界面后,可以输入两种指令,一种是自身配置和格式控制相关指令,以“.”开头;另外一种指令是sql语句,实现对数据库的增删改查等操作,这些指令以“;”结束
    • .database // 查看数据库的名字和对应的文件名
    • .table // 查看数据表的名字
    • .schema // 查看数据表创建时信息
    • .mode // 设置显示模式,如tab/column/list/csv/…,推荐前两个
    • .nullvalue // 设置空白字段显示的字符串
    • .header on/off // 显示/关闭 数据表的表头
  • 输入.help或.h可以获取以“.”开头指令的帮助信息
  • 输入.exit或.quit退出SQLite的命令界面,回到系统的控制终端
  • 若需要清屏,可使用“Ctrl + L”

SQLite命令行程序(SQL语句)

  • 创建数据表
    CREATE TABLE 表名(列名1 类型[约束], 列名2 类型[约束],...);
    常用的类型:INT(整型)、TEXT(字符串)、REAL(浮点数)
    常用的约束:
    • PRIMARY KEY(主键):表示该列数据唯一,可以加快数据访问
    • NOT NULL(非空):该列数据不能为空
  • 删除数据表
    DROP TABLE 表名;,慎用,数据表一旦删除,里面数据也随之消失。
  • 向数据表插入数据
    INSERT INTO 表名(列名1, 列名2, ...) VALUES(数值1, 数值2, ...);
    若要为表中的所有列添加值,并且插入列的顺序和创建表的顺序相同,可以不指定列名。
    INSERT INTO 表名 VALUES(数值1, 数值2, ...);
  • 从数据表删除数据
    DELETE FROM 表名 WHERE 条件表达式;
    可以没有WHERE子句,此时数据表中的所有数据都将被删除。若有多个条件语句,可以使用逻辑与(and)或逻辑或(or)连接。
  • 修改数据表中的数据
    UPDATE 表名 SET 列名1 = 新数值, 列名2 = 新数值, ... WHERE 条件表达式;
    可以没有WHERE子句,此时数据表中的所有数据都将被修改;“新数值”可以是一个常数,也可以是一个表达式。
  • 查询数据表中的数据
    SELECT 列名1, 列名2, ... FROM 表名;
    SELECT 列名1, 列名2, ... FROM 表名 WHERE 条件表达式;
    SELECT 列名1, 列名2,... FROM 表名 WHERE 条件表达式 ORDER BY 列名 排序方式;
    ORDER BY子句可以和WHERE子句配合使用,也可以独立使用。
    排序方式 :ASC(升序排列)、DESC(降序排列)。
  • 模糊查询
    SELECT 列名1, 列名2, ... FROM 表名 WHERE 列名 LIKE 模糊匹配条件;
    ORDER BY子句可以和WHERE子句配合使用,也可以独立使用。
    • 模糊匹配通配符,可以组合使用
      • 百分号(%):代表零个、一个或多个数字或字符
      • 下划线(_):代表一个单一的数字或字符

在Qt中使用SQLite

  • QSqlDatabase建立Qt应用程序和数据库连接
// 添加数据库驱动
db = QSqlDatabase::addDatabase("QSQLITE");
// 设置数据库名字
db.setDatabaseName("xxx.db");
// 打开数据库
db.open();

使用Qt数据库模块需要在工程文件中添加"QT += sql"

  • QSqlQuery执行数据库操作的SQL语句
QSqlQuery query;
query.exec("SELECT、DELETE、INSERT、UPDATE等SQL语句");
  • QSqlQueryModel获取结果集
QString str = QString("SELECT * FROM 表名");
QSqlQueryModel* model = new QSqlQueryModel;
model->setQuery(str);	// 执行查询操作,并将结果集保存到model对象中
ui->menuTableView->setModel(model);		// 显示查询结果

参考:达内教育QT图形框架

相关文章:

  • WinUI3入门6:子线程处理UI 窗口加载后执行 获取和设置控件尺寸 自动生成事件代码框架
  • 解锁微服务潜能:深入浅出 Nacos
  • 从“看懂”到“行动”: VLM 与 VLA
  • 吃透 Golang 基础:Goroutine
  • 爱普生RX-8803LC时钟模块的特性与智能家居系统的连接方法
  • 可以媲美美颜相机的一款萌系美颜相机软件
  • 基于Uniapp+PHP的教育培训系统开发指南:网校源码实战剖析
  • 密室出逃消消乐小游戏微信流量主小程序开源
  • 【python】多次重试调用ai大模型
  • 数据结构第八章(五)-外部排序和败者树
  • Python PyMySQL【mysql适配器】 简介
  • 异地组网工具
  • C#建立与数据库连接(版本问题的解决方案)踩坑总结
  • python智慧物业管理系统
  • 树莓派5 安装Mysql (Docker + mariadb)方案
  • TensorFlow+CNN垃圾分类深度学习全流程实战教程
  • Camera Sensor接口协议全解析(一)开篇 - 数据管道,成像系统的生命线题】
  • 【Linux驱动开发 ---- 4_驱动开发框架和 API】
  • RK3588调试之旅:adbd服务配置全攻略
  • Android Automotive OS 的发展历程:从概念到智能汽车的核心
  • 网站建设的重要/网站seo外链建设
  • 东莞网络优化专业乐云seo/合肥品牌seo
  • 关于申请网站建设/营销渠道策略有哪些
  • 建网站要花费多少钱/互联网营销的特点
  • 网站后台登录地址怎么安全/网站排名优化外包公司
  • 怎样做免费抽皮肤的网站/武汉今日头条最新消息