Qt 中使用 MySQL 数据库保姆级教程(下)
作者:billy
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
前言
上篇中我们安装好了 MySQL 数据库和 Navicat 软件,下面在 Qt 中尝试使用数据库
1. 在 Qt 中连接 MySQL 数据库,尝试一下是否可行
-
在 pro 中添加数据库模块
QT += sql
-
测试代码如下:
#include <QSqlDatabase>
#include <QSqlError>
#include <QDebug>int main()
{QSqlDatabase database = QSqlDatabase::addDatabase("QMYSQL");database.setHostName("127.0.0.1");database.setPort(3306);database.setUserName("root");database.setPassword("12345678");database.setDatabaseName("swyl");if ( database.open() ) {qDebug() << "ok";} else {qDebug() << "ng";qDebug() << database.lastError().text();}return 0;
}
-
此时运行代码会报错,提示你 没有加载 QMYSQL 数据库的驱动
-
上面提示了目前可用的数据库驱动,没有 MySQL 的,那就需要我们编译驱动并拷贝到 Qt 中
2. 编译 MySQL 代码并拷贝驱动
-
把下载的 源代码 mysql-8.0.34-winx64.rar 这个压缩包复制到 MYSQL 安装目录下并解压
-
打开 Qt 自带的 mysql 工程
路径:D:\Qt\Qt_5.15.2\5.15.2\Src\qtbase\src\plugins\sqldrivers\mysql
-
修改 pro 文件
-
修改 pri 文件
-
用 mingw 编译器编译
得到下图中3个文件,把 qsqlmysql.dll 拷贝到 D:\Qt\Qt_5.15.2\5.15.2\mingw81_64\plugins\sqldrivers
-
用 msvc 编译器编译
得到 debug 和 release 版本的 lib 和 dll
把编译生成的 qsqlmysql.dll 和 qsqlmysqld.dll 拷贝到 D:\Qt\Qt_5.15.2\5.15.2\msvc2019_64\plugins\sqldrivers
再把 qsqlmysql.lib 和 qsqlmysqld.lib 拷贝到 D:\Qt\Qt_5.15.2\5.15.2\msvc2019_64\lib
最后把 qsqlmysql.dll 和 qsqlmysqld.dll 拷贝到 D:\Qt\Qt_5.15.2\5.15.2\msvc2019_64\bin
-
现在 Qt 中已经有 MySQL 的驱动了,再运行测试程序,就可以成功了
3. 程序打包发布后无法连接 MySQL 数据库
使用 windeployqt 打包发布程序时,不会把 MySQL 的依赖库带上,需要我们手动去拷贝,否则在另一台电脑上就会出现无法连接 MySQL 数据库的情况
需要的依赖库还挺多,网上说的只拷贝 plugins 下的亲测是不行的,博主整理了一下需要这些:
1)首先 qsqlmysql.dll 和 qsqlmysqld.dll 是刚才我们编译得到的,发布 release 版本时 qsqlmysqld.dll 可以不用带着
2)libmysql.dll 在 MySQL 源代码路径中 D:\MySQL\mysql-8.0.34-winx64\lib
3)libssl-3-x64.dll 和 libcrypto-3-x64.dll 是 libmysql.dll 的依赖项,也在 MySQL 源代码路径中
4)本以为拷贝了上述几个依赖库就足够了,结果测试还是不行,还需要最后两个在 Qt 的安装路径下
更多请参考
- Qt 中使用 MySQL 数据库保姆级教程(上)
相关文章:

Qt 中使用 MySQL 数据库保姆级教程(下)
作者:billy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 前言 上篇中我们安装好了 MySQL 数据库和 Navicat 软件,下面在 Qt 中尝试使用数据库 1. 在 Qt 中连接 MySQL 数据库&#…...

【数据库原理】(1)数据库技术的发展
数据与信息 数据:数据并非只是数字,像文字、符号、图像、影音等都属于数据的范畴。但一般会用数字来表述客观事物的数量、质量、关系等,便于更加直观的看待问题。 语义:数据还需要结合关联的语义解释才能够清晰的描述事物&#…...

【动态规划】【字符串】C++算法:正则表达式匹配
作者推荐 视频算法专题 涉及知识点 动态规划 字符串 LeetCode10:正则表达式匹配 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘’ 的正则表达式匹配。 ‘.’ 匹配任意单个字符 ’ 匹配零个或多个前面的那一个元素 所谓匹配,是…...

fgetc_fgets_getc_getchar
一、fgetc 1、从流中读取下一个字符 下一个的意思是紧跟在指针后面的,对于一个刚打开文件的流,指针在文件的最前面,它的下一个字符就是文件的第一个字符。读完第一个字符后,指针就会走到第一个字符后面,这时它的下一个…...

12.30_黑马数据结构与算法笔记Java
目录 320 全排列无重复 Leetcode47 321 组合 Leetcode77 分析 322 组合 Leetcode77 实现 323 组合 Leetcode77 剪枝 324 组合之和 Leetcode 39 325 组合之和 Leetcode 40 326 组合之和 Leetcode 216 327 N皇后 Leetcode51-1 328 N皇后 Leetcode51-2 329 解数独 Leetco…...

【电路笔记】-电容分压器
电容分压器 文章目录 电容分压器1、概述2、串联电容器的电压分布3、电容分压器示例14、电容分压器示例2 分压器电路可以由电抗元件构成,就像由固定值电阻器构成一样容易。 1、概述 但就像电阻电路一样,电容分压器网络即使使用属于电抗元件的电容器&…...

线性代数基础知识
计算机视觉一些算法中常会用到线性代数的一些知识,为了便于理解和快速回忆,博主这边对常用的一些知识点做下整理,主要来源于如下这本书籍。 1. 矩阵不仅仅是数字排列而已,不然也不会有那么大精力研究它。其可以表示一种映射 关于…...
Linux Shell 016-文本比较工具diff
Linux Shell 016-文本比较工具diff 本节关键字:Linux、Bash Shell、文本比较 相关指令:diff、cat、patch diff介绍 diff工具用于逐行比较文件的不同,如果指定要比较目录,则diff会比较目录中相同文件名的文件,但不会…...
八股文打卡day13——计算机网络(13)
面试题:DNS是什么?DNS的查询过程是什么? 我的回答: 我来讲一下我对DNS的理解 DNS是域名系统,它是一个域名和IP地址相互映射的数据库。通过DNS,可以将我们浏览器中输入的域名,例如:…...
android studio导入module
在Android Studio中导入一个Module(模块),可以按照以下步骤进行操作: 打开Android Studio,并打开你的项目。在菜单栏中,点击 "File"(文件)-> "New"…...

Prometheus通过consul实现自动服务发现
环境,软件准备 本次演示环境,我是在虚拟机上安装 Linux 系统来执行操作,以下是安装的软件及版本: System: CentOS Linux release 7.6Docker: 24.0.5Prometheus: v2.37.6Consul: 1.6.1 注意:这里为了方便启动 Prometheus、Consul服…...
c++11--原子操作,顺序一致性,内存模型
1.原子操作 多线程下为了实现对临界区资源的互斥访问,最普遍的方式是使用互斥锁保护临界区。 然而,如果临界区资源仅仅是数值类型时,对这些类型c提供了原子类型,通过使用原子类型可以更简洁的获得互斥保护的支持。 (1). 一个实例…...

【数据结构】栈和队列(队列的基本操作和基础知识)
🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343🔥 系列专栏:《数据结构》https://blog.csdn.net/qinjh_/category_12536791.html?spm1001.2014.3001.5482 目录 前言 队列 队列的概念和结构 队列的…...

设计模式——适配器模式(Adapter Pattern)
概述 适配器模式可以将一个类的接口和另一个类的接口匹配起来,而无须修改原来的适配者接口和抽象目标类接口。适配器模式(Adapter Pattern):将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装…...

测试C#使用OpenCvSharp从摄像头获取图片
OpenCvSharp也支持获取摄像头数据,不同于之前测试AForge时使用AForge控件显示摄像头数据流并从中截图图片,OpenCvSharp中显示摄像头数据流需要周期性地从摄像头中截取图片并显示在指定控件中。本文学习C#使用OpenCvSharp从摄像头获取图片的基本方式。 …...

【基础】【Python网络爬虫】【12.App抓包】reqable 安装与配置(附大量案例代码)(建议收藏)
Python网络爬虫基础 App抓包1. App爬虫原理2. reqable 的安装与配置reqable 安装教程reqable 的配置 3. 模拟器的安装与配置夜神模拟器的安装夜神模拟器的配置配置代理配置证书 4. 内联调试及注意事项软件启动顺开启抓包功reqable面板功列表部件功能列表数据快捷操作栏 夜神模拟…...

LabVIEW在电机噪声与振动探测的应用
LabVIEW在电机噪声与振动探测的应用 硬件部分是电机噪声和振动测试分析系统的基础,主要由三大核心组件构成:高灵敏度振动传感器、先进的信号调理电路和高性能数据采集卡。这些设备协同工作,确保了从电机捕获的噪声和振动信号的准确性和可靠性…...
编码器是什么,以光电编码器为例,说明一下光电编码器的名字由来,结构,原理,特点,用处
问题描述: 问题解答: 定义:编码器是一种测量角度、位置、速度等物理量的传感器,它可以将物理量转换成电信号,以便计算机或控制系统进行处理和控制。编码器通常由码盘和光电转换器组成,码盘上刻有若干条码道…...
MySQL:主从复制
准备两台服务器:安装好mysql mysql1:192.168.2.222 master mysql2:192.168.2.226 slave 1、主从服务器分别作以下 1.1、版本一致 1.2、初始化表,并在后台启动mysql 1.3、修改root的密码 2、修改主服务器master #vi /etc/my…...

【K8S 二进制部署】部署Kurbernetes的网络组件、高可用集群、相关工具
目录 一、K8S的网络类型: 1、K8S中的通信模式: 1.1、、pod内部之间容器与容器之间的通信 1.2、同一个node节点之内,不同pod之间的通信方式: 1.3、不同node节点上的pod之间是如何通信的呢? 2、网络插件一ÿ…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...

CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...

优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...