学习视频链接

2021新版QT图形框架编程开发(层层到肉)_C++图形用户界面开发框架_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Wf4y1Y7uh?p=19&spm_id_from=pageDriver&vd_source=0471cde1c644648fafd07b54e303c9052021-sqlite3数据库快速入门_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1rf4y187oC?p=7&spm_id_from=pageDriver&vd_source=0471cde1c644648fafd07b54e303c905

目录

一、数据库简介

1.1 概念

1.2 相关术语

1.3 常见的数据库

1.4 数据库操作语言 (SQL)

1.5 Sqlite 数据库

1.6 Sqlite 工作原理

1.7 Sqlite 主要特性

二、配置和安装

三、Sqlite 的操作指令

3.1 常用命令

3.2 操作指令

3.3 Sqlite 命令行程序 (SQL语句)

四、在 Qt 中使用 Sqlite 数据库

4.1 QSqlQuery 执行数据库操作的 SQL 语句

4.2 QSqlQueryModel 获取结果集

4.3 QSqlDatabase 建立 Qt 应用程序和数据库连接

4.4 搭建项目

4.5 生成槽函数、添加头文件、声明变量和函数

4.6 编写函数


一、数据库简介

1.1 概念

数据库是指以一定方式存储在一起,能为多个用户共享,具有尽可能小的冗余特性,是与应用
程序彼此独立的数据集合

1.2 相关术语

DB 数据库(database)

DBMS 数据库管理系统

DBA 数据库管理员

RDB 关系式数据库

1.3 常见的数据库

1、商业数据库

甲骨文 Oracle

微软的 Sqlserver

IBM 的 DB2

2、非商业数据库

Sun 公司的 Mysq|,2009 年 sun 公司被 Oracle 收购,所以 mysql 现在属于甲骨文旗下的产品

开源的 SQLite,轻量级嵌入式关系型数据库

1.4 数据库操作语言 (SQL)

1、SQL概念

SQL (Structured Query Language) 是一种针对数据库的结构化查询语言,用于实现数据库查询和程序设计,常用于关系数据库系统,实现数据存取、查询、更新等操作。

2、常用的 SQL 语句

数据操作语言 (DML) : SELECT、INSERT、DELETE、UPDATE

数据定义语言 (DDL) : CREATE TABLE

1.5 Sqlite 数据库

SQLite 是一个轻量级的开源数据库,源代码完全公开不受版权限制,实现了自给自足的、无服务器、零配置的 SQL 数据库引擎,也是最广泛使用关系式数据库

SQLite (www.sqlite.org) 提供 SQLite 的已编译版本和源程序

1.6 Sqlite 工作原理

SQLite 引擎不是程序与之通信的独立进程,而是以静态库或共享库的方式连接到程序中,而不同于客户 - 服务器数据库连接方式,所以主要的使用方法是在编程语言内的直接 API 调用,当前主流的编程语言,如 C/C+、java、 python 等都提供了 sqlite 操作的 API 接口

SQLite 在资源消耗、实时性和可操作性有着出色的表现,整个数据库 (定义、表、索引和数据本身) 都在宿主主机上存储在一个单一的文件中,通常 SQLite 的工作是在开始一个事务的时候锁定整个数据文件而实现

1.7 Sqlite 主要特性

SQLite 不需要一个单独的服务器进程或操作的系统 (无服务器的)

SQLite 可以不用配置,安装或管理十分简单

SQLite 数据库是存储在一个单一的跨平台的磁盘文件

SQLite 是非常小的,是轻量级的,完全配置时小于 400 KB,省略可选功能配置时小于 250 KB

SQLite 是自给自足的,开发者不需要任何外部的依赖

SQLite 支持 SQL92 标准的大多数查询语言的功能

SQLite 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问

二、配置和安装

Linux 可以看学习视频链接第一个链接中的安装方式

Windows 可以进入下载网址 SQLite Download Pagehttps://www.sqlite.org/download.html

下载对应的两个压缩包

然后解压

把这个文件夹配置到环境变量里面,就可以在任意的位置进入数据库管理系统里面

三、Sqlite 的操作指令

3.1 常用命令

.database 查看数据库的名字
.table 查看数据表的名字
.schema 查看数据表创建时信息
.mode 设置显示模式,如 tab/list/column/csv
.nullvalue 设置空白字段显示的字符串
.header on 显示数据表的表头

 

3.2 操作指令

1、SQLite 命令行界面可以输入两种指令,一种是自身配置和格式控制相关指令,这些指令以 . 开头,另一种是 SQL 指令,以 ; 结束

2、输入 .help 获取 . 指令的帮助,输入 .exit 或者 .quit 退出命令界面,回到系统控制终端

3.3 Sqlite 命令行程序 (SQL语句)

1、创建数据表

CREATE TABLE 表名(列名1 类型[约束], 列名2 类型[约束], ...);

2、常用的类型

INT(整型)、 TEXT(字符串)、REAL(浮点数)

3、常用的约束

PRIMARYKEY (主键):表示该列数据唯一,可以加快数据访问

NOT NULL (非空):该列数据不能为空

实例

4、删除数据表

DROP TABLE 表名;

注:慎用,数据表一旦删除里面数据也将随之消失.

实例

5、向数据表中插入数据

INSERT INTO 表名(列名1, 列名2, ...) VALUES(数值1, 数值2, ...);

如果要为表中的所有列添加值,并且插入列的顺序和创建表的顺序相同,可以不需要在 Sqlite 查询中指定列名

INSERT INTO 表名 VALUES(数值1, 数值2, ...);

插入数据实例

INSERT INTO company (id, name, age, salary) VALUES(10021, '小乔', 24, 11000);

INSERT INTO company VALUES(10022, 大乔', 29, '江西', 13000);

6、从数据表删除数据

DELETE FROM 表名 WHERE 条件表达式;

注: 可以没有 WHERE 子句,但数据表的所有数据都将被删除

注: 如果有多个条件可以使用逻辑与 (and) 或逻辑或 (or) 连接

删除数据实例

DELETE FROM company WHERE id = 10029;

DELETE FROM company WHERE address = '成都’ and salary < 1000;

7、修改数据表中的数据

UPDATE 表名 SET 列名1 = 新数值, 列名2 = 新数值 ... WHERE 条件表达式;

注: 可以没有 WHERE 子句,但数据表的所有数据都将被修改

注: ”新数值” 可以是一个常数,也可以是一个表达式

修改数据实例 

UPDATE company SET age = 45 WHERE id = 10011;

UPDATE company SET salary = salary + 2000 WHERE age >= 30 and age <= 35;

8、查询数据表中的数据

SELECT 列名1, 列名2, ... FROM 表名;

SELECT 列名1, 列名2 ... FROM 表名 WHERE 条件表达式;

SELECT 列名1, 列名2 ... FROM 表名 WHERE 条件表达式 ORDER BY 列名排序方式;

注: ORDER BY 子句可以和 WHERE 子句配合使用,也可以独立使用

查看操作实例

SELECT * FROM company WHERE salary>10000 or salary<3500;

SELECT * FROM company ORDER BY id ASC;

9、模糊查询

SELECT 列名1, 列名2 ... FROM 表名 WHERE 列名 LIKE 模糊匹配条件;

注: ORDER BY 子句可以和 WHERE 子句配合使用,也可以独立使用

模糊匹配通配符

百分号 (%) : 代表零个、一个或多个数字或字符

下划线 (_) : 代表一个单一的数字或字符

注:它们可以被组合使用

模糊查询实例

// 根据工资匹配,查找工资数包含 ‘8’ 的数据

SELECT * FROM company WHERE salary LIKE '%8%';

// 根据姓名匹配,查找姓 “关”,名字是两个字的数据

SELECT * FROM company WHERE name LIKE 关_;

// 根据工资匹配,查找工资第二位是 2 并以 3 结尾的任意值

SELECT * FROM company WHERE salary WHERE SALARY LIKE '_2%3'

四、在 Qt 中使用 Sqlite 数据库

4.1 QSqlQuery 执行数据库操作的 SQL 语句

QSqlQuery query;

query.exec("SELECT、DELETE、INSERT、UPDATE 等 SQL 语句");

4.2 QSqlQueryModel 获取结果集

QString str = QString("SELECT * FROM 表名");

QSqlQueryModel * model = new QSqlQueryModel;

model->setQueryl(tr);  //执行查询操作,并将结果集保存到 model 对象中

ui->menuTableView->setModel(model);  // 显示查询结果

4.3 QSqlDatabase 建立 Qt 应用程序和数据库连接

// 添加数 据库驱动

db = QSqlDatabase::addDatabase("QSQLITE");

// 设置数据库名字

db.setDatabaseName("menu.db");

// 打开数据库

db.open();

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

4.4 搭建项目

添加对应的库

制作界面

 

其他常规设置

4.5 生成槽函数、添加头文件、声明变量和函数

1、槽函数生成

2、头文件

3、声明变量和函数

4.6 编写函数

1、创建或建立连接 和 创建或寻找表

#include "studialog.h"
#include "ui_studialog.h"StuDialog::StuDialog(QWidget *parent): QDialog(parent), ui(new Ui::StuDialog)
{ui->setupUi(this);createDB();createTable();queryTable();
}StuDialog::~StuDialog()
{delete ui;
}// 创建数据库
void StuDialog::createDB()
{// 添加数据库驱动库db = QSqlDatabase::addDatabase("QSQLITE");// 设置数据库名字(文件名)db.setDatabaseName("student.db");// 打开数据库if (db.open() == true) {qDebug() << "创建/打开数据库成功!";}else {qDebug() << "创建/打开数据库失败!";}
}// 创建数据表
void StuDialog::createTable()
{QSqlQuery query;QString str = QString("CREATE TABLE stucent (""id INT PRIMARY KEY NOT NULL,""name TEXT NOT NULL,""score REAL NOT NULL)");// 执行sql语句失败后打印失败语句,成功则不作处理if(query.exec(str) == false) {qDebug() << str;}
}// 查询
void StuDialog::queryTable()
{}// 插入操作对应的槽函数
void StuDialog::on_insert_button_2_clicked()
{}// 删除操作对应的槽函数
void StuDialog::on_delete_button_clicked()
{}// 修改操作对应的槽函数
void StuDialog::on_update_button_clicked()
{}// 排序操作对应的槽函数
void StuDialog::on_sort_button_clicked()
{}

现在运行一下程序,会生成一个 .db 文件,用 sqlite 打开 .sql

2、把数据库获取到的数据放到控件里面

// 查询
void StuDialog::queryTable()
{QString str = QString("SELECT * FROM student");model.setQuery(str);ui->tableView->setModel(&model);
}

目前没有数据,只有一个表格的格式

3、增加数据

// 插入操作对应的槽函数
void StuDialog::on_insert_button_2_clicked()
{QSqlQuery query;int id = ui->id_edit->text().toInt();QString name = ui->name_edit->text();double score = ui->score_edit->text().toDouble();QString str = QString("INSERT INTO student VALUES(%1, '%2', %3)").arg(id).arg(name).arg(score);if(query.exec(str) == false) {qDebug() << str;}else {qDebug() << "插入数据成功!";queryTable();}
}

4、删除、修改

// 删除操作对应的槽函数:根据ID删除一条数据
void StuDialog::on_delete_button_clicked()
{QSqlQuery query;int id = ui->id_edit->text().toInt();QString str = QString("DELETE FROM student WHERE id = %1").arg(id);if(query.exec(str) == false) {qDebug() << str;}else {qDebug() << "删除数据成功!";queryTable();}
}// 修改操作对应的槽函数:根据ID修改成绩
void StuDialog::on_update_button_clicked()
{QSqlQuery query;int id = ui->id_edit->text().toInt();double score = ui->score_edit->text().toDouble();QString str = QString("UPDATE student SET score = %1 WHERE id = %2").arg(score).arg(id);if(query.exec(str) == false) {qDebug() << str;}else {qDebug() << "修改数据成功!";queryTable();}
}

5、排序

// 排序操作对应的槽函数
void StuDialog::on_sort_button_clicked()
{// 获取排序列名QString value = ui->value_comboBox->currentText();// 获取排序方式QString condition;if(ui->cond_comboBox->currentIndex() == 0) {condition = "ASC";  // 升序}else {condition = "DESC";  // 降序}QString str = QString("SELECT * FROM student ORDER BY %1 %2").arg(value).arg(condition);// 查询和显示model.setQuery(str);ui->tableView->setModel(&model);
}

QT学习日记17——Qt数据库相关推荐

  1. Qt学习笔记之MySQL数据库

    一.MySQL概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQ ...

  2. Qt学习笔记,Qt国际化

    Qt学习笔记,Qt国际化 Qt国际化步骤: 第一步:设置.pro文件,加入TRANSLATIONS为国际化做准备 TRANSLATIONS = language/language_en.ts\     ...

  3. Qt学习笔记,Qt程序架构设计要旨

    Qt学习笔记,Qt程序架构设计要旨 时间过得很快,转眼学习Qt已经有一个多月了,对Qt的学习也在不断的深入中.自己手下的code也很多了,不过不得不说,还有很多的部分没有接触过,比如网络编程,2D,3 ...

  4. QT学习之解决QT中QIcon图标不显示的问题

    QT学习之解决QT中QIcon图标不显示的问题 参考文章: (1)QT学习之解决QT中QIcon图标不显示的问题 (2)https://www.cnblogs.com/yang12318/p/1069 ...

  5. PyQt(Python+Qt)学习随笔:Qt Designer中部件的accessibleDescription和accessibleName辅助阅读属性

    accessibleDescription和accessibleName属性都是用于残疾人辅助阅读的,这两个属性都有国际化属性(关于国际化请参考<PyQt(Python+Qt)学习随笔:Qt D ...

  6. Qt学习笔记之SQLITE数据库

    1. SQLite数据库介绍 SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.它是D.RichardHipp建立的公有领域项目.它的设计目标是嵌入式 ...

  7. QT学习日记15——绘图事件

    学习视频链接 最新QT从入门到实战完整版|传智教育_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1g4411H78N?p=37&vd_sourc ...

  8. Qt学习(十一):QT设置静态数据库

    知识点 如果数据量少的情况下,不需要连接本地mysql,自己创建一个db文件就行 完整项目github地址: https://github.com/taw19960426/Qt_study/tree/ ...

  9. Qt学习(十):QT连接mysql(增加、删除、遍历)

    知识点 Qt连接数据库 数据库的插入+删除+遍历 数据库的批量插入 完整项目github地址: https://github.com/taw19960426/Qt_study/tree/main/Da ...

最新文章

  1. 比尔盖茨NEJM发文:新冠肺炎是百年一遇的流行病!全世界应该如何应对?
  2. Java基础01 从HelloWorld到面向对象
  3. 自己动手用C扩展PHP(三)
  4. debian php安装pdo扩展,docker安装PHP扩展2020-05-25
  5. Node.js DNS 模块
  6. c通过位运算求绝对值_初中数学归类总结(四)有理数的乘除乘方及混合运算...
  7. MySQL8.0.11的安装和Navicat连接mysql
  8. amd的处理器能兼容idea么_AMD新一代CPU不向下兼容,究竟意味着什么?
  9. 音量控制 单片机c 语言,(封贴)请大神代写音响音量控制程序(有偿代写)单片机加TDA7313控制...
  10. jeecms 取附件
  11. 微信支付的appid,appsecret,商户号mchid,微信交易支付密钥在哪里
  12. 【ToyDB-Rust】超详细介绍
  13. 冠词,a/an/the --- 元音字母
  14. 自己的智能AI聊天机器人,可自定义头像,免费html源码分享,粘贴即用!
  15. mysql安装所需最低配置数据_MySQL的安装与基本配置
  16. word流程图怎么使箭头对齐_工作流程图的方框怎样平均纵横对齐:又怎样 让箭头对齐到流程图方框线中间,请教了。...
  17. 10款 Mac 经典原型设计开发软件推荐
  18. 易风神通代理服务器 v2.5 绿色
  19. 图片格式批量转换,批量处理
  20. 一个简单的基于python图书管理系统

热门文章

  1. OpenCV VideoCapture使用方法(视频文件、摄像头、网络视频文件)
  2. 010 面向对象编程
  3. html战旗游戏,战棋页游-策略类战棋网页游戏推荐
  4. 强化学习实战-使用Sarsa算法解决悬崖问题
  5. Spring Boot入门(12):一文吃透Spring Boot整合MyBatis-Plus | 保姆级教程,建议收藏
  6. 利用UltrISO将gho文件制作可引导iso
  7. app播放无声音乐实现app后台运行
  8. 报警器——基于arduino
  9. 我知道的几个免费的API数据接口
  10. 【100%通过率】华为OD机试真题 Java 实现【处理器问题/ 高性能AI处理器】【2022.11 Q4 新题】