【Qt】数据库实战(一)
00. 目录
文章目录
- 00. 目录
- 01. 概述
- 02. 开发环境
- 03. 数据库驱动
- 04. 创建数据库连接
- 05. 数据库简单操作
- 06. 附录
01. 概述
Qt中的Qt SQL模块提供了对数据库的支持,该模块中的众多类基本上可以分为三层。
驱动层为具体的数据库和SQL接口层之间提供了底层的桥梁;SQL接口层提供了对数据库的访问,其中的QSqlDatabase类用来创建连接,QSqlQuery类可以使用
SQL语句来实现与数据库交互,其他几个类对该层提供了支持;用户接口层的几个类实现了将数据库中的数据链接到窗口部件上,它们是更高层次的抽象,即便不
熟悉SQL也可以操作数据库。如果要使用Qt SQL模块中的这些类,需要在项目文件(.pro文件)中添加QT += sql这一行代码。对应数据库部分的内容,大家可以
在帮助中查看SQL Programming关键字。
02. 开发环境
Windows系统:Windows10
Qt版本:Qt5.15或者Qt6
03. 数据库驱动
Qt SQL模块使用数据库驱动来和不同的数据库接口进行通信。由于Qt的SQL模型的接口是独立于数据库的,所以所有数据库特定的代码都包含在了这些驱动中。Qt现在支持的数据库驱动如下图所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WfTJJ8Qj-1616658483966)(assets/image-20210325152325294.png)]
需要说明的是,由于GPL许可证的兼容性问题,并不是这里列出的所有驱动插件都提供给了Qt的开源版本。下面我们通过程序来查看一下现在版本的Qt中可用的数据库插件。
在.pro文件中添加下面一行
QT += sql
程序示例:
#include <QCoreApplication>#include <QSqlDatabase>
#include <QStringList>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);qDebug() << "Availabel drivers: ";QStringList drivers = QSqlDatabase::drivers();foreach(QString str, drivers){qDebug() << str;}return 0;
}
执行结果:
Availabel drivers:
"QSQLITE"
"QODBC"
"QODBC3"
"QPSQL"
"QPSQL7"
04. 创建数据库连接
下面使用QSLite数据库来进行一个简单的演示,创建一个数据库表,然后连接到数据库,我们更改main.cpp文件的内容如下:
#include <QCoreApplication>#include <QSqlDatabase>
#include <QStringList>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);//创建一个SQLite数据库连接QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");db.setDatabaseName(":memory:");bool ret = db.open();if (ret){qDebug() << "打开数据库成功";}else{qDebug() << "打开数据库失败";}//关闭数据库if (db.isOpen()){db.close();db.removeDatabase(db.databaseName());}return 0;
}
执行结果:
打开数据库成功
05. 数据库简单操作
下面使用QSLite数据库来进行一个简单的演示,创建一个数据库表,然后查找其中的数据并进行输出。我们更改main.cpp文件的内容如下:
#include <QCoreApplication>#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QStringList>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);//创建一个SQLite数据库连接QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");db.setDatabaseName(":memory:");bool ret = db.open();if (ret){qDebug() << "打开数据库成功";}else{qDebug() << "打开数据库失败";return -1;}//创建QSqlQuery对象QSqlQuery query;query.exec("create table student(id int primary key, name varchar)");query.exec("insert into student values(1, 'xiaoming')");query.exec("insert into student values(2, 'xiaogang')");query.exec("insert into student values(3, 'xiaohong')");//查找表中id > 2的数据query.exec("select id, name from student where id >= 2");while(query.next()){int id = query.value(0).toInt();QString name = query.value(1).toString();//输出两个值qDebug() << id << " " << name;}//关闭数据库if (db.isOpen()){db.close();db.removeDatabase(db.databaseName());}return 0;
}
执行结果:
打开数据库成功
2 "xiaogang"
3 "xiaohong"
06. 附录
6.1 Qt教程汇总
网址:https://dengjin.blog.csdn.net/article/details/115174639
6.2 源码下载
网址:【Qt】数据库实战(一).rar
【Qt】数据库实战(一)相关推荐
- 【Qt】数据库实战之QSqlRelationalTableModel
00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. QSqlRelationalTableModel外键 04. QSqlRelationalDelegate委托类 05. ...
- 【Qt】数据库实战之QSqlTableModel模型
00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. QSqlTableModel基本操作 04. QSqlTableModel修改操作 05. QSqlTableModel查 ...
- 【Qt】数据库实战之QSqlQueryModel
00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. QSqlQueryModel查询模型 04. QSqlQueryModel常用操作 05. QSqlQueryModel自 ...
- 【Qt】数据库实战(三)
00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 增删改查操作 04. 名字绑定和位置绑定 05. 程序示例 06. 批处理操作 07. 事务操作 08. 附录 01. 概 ...
- 【Qt】数据库实战(二)
00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 连接到数据库 04. 操作结果集 06. 附录 01. 概述 SQL即结构化查询语言,是关系数据库的标准语言.前面已经在Q ...
- 深入浅出Qt数据库编程:从基本操作到高级技巧
深入浅出Qt数据库编程:从基本操作到高级技巧 (Demystifying Qt Database Programming: From Basic Operations to Advanced Tech ...
- Qt项目实战:MP3音乐播放器
音乐播放器逻辑 首先通过打开文件,获取文件夹下mp3文件的名字,将其存入QTableWidget控件下,通过双击QTableWidget空间中的内容,播放相应的mp3音乐文件,同时通过使用QMed ...
- shell编程系列22--shell操作数据库实战之shell脚本与MySQL数据库交互(增删改查)
shell编程系列22--shell操作数据库实战之shell脚本与MySQL数据库交互(增删改查)Shell脚本与MySQL数据库交互(增删改查)# 环境准备:安装mariadb 数据库 [root ...
- Qt数据库操作(三) -- 使用SQL模型类
文章目录 Qt数据库操作(三) -- 使用SQL模型类 1.SQL查询模型 2.SQL表格模型 3.关系表格模型 Qt数据库操作(三) – 使用SQL模型类 Qt 提供了3个高级的类来访问数据库,分别 ...
最新文章
- html5 作业调度,Net作业调度(五)—quartz.net动态添加job设计
- LaTeX技巧如何拆分源文件并且分别编译
- java实现从头部及尾部删除指定长度字符
- python给动态变量赋值_python 动态的定义变量名,并给其赋值
- 使用Python爬取mobi格式电纸书
- sqlserver 累计数量_用sqlserver查询累计值
- My.Ioc 代码示例——如何使用默认构造参数,以及如何覆盖默认构造参数
- html远程连接mysql_mysql允许远程连接
- Unity与UE4引擎源码内使用到的第三方库的比较
- Mybatis缓存实现原理
- (一)抖音快手短视频去水印原理分析
- css 图片放大1.2倍,什么是二倍图?怎样使用二倍图?
- Mac 下如何解压 bin 文件
- 2022 面试必刷 461 道大厂架构面试真题汇总 + 面经 + 简历模板
- python操作word文档
- ts中的never类型
- 朴素贝叶斯算法原理以及python实现
- 小写数字转换成大写数字
- excel表格怎么调整行高和列宽_wps表格课程08|调整行高列宽
- 波段合成,去除黑边并提取土地利用数据....下