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

Qt 中使用 MySQL 数据库保姆级教程(下)

作者:billy
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

前言

上篇中我们安装好了 MySQL 数据库和 Navicat 软件,下面在 Qt 中尝试使用数据库

1. 在 Qt 中连接 MySQL 数据库,尝试一下是否可行

  1. 在 pro 中添加数据库模块
    QT += sql

  2. 测试代码如下:

#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;
}
  1. 此时运行代码会报错,提示你 没有加载 QMYSQL 数据库的驱动
    在这里插入图片描述

  2. 上面提示了目前可用的数据库驱动,没有 MySQL 的,那就需要我们编译驱动并拷贝到 Qt 中

2. 编译 MySQL 代码并拷贝驱动

  1. 把下载的 源代码 mysql-8.0.34-winx64.rar 这个压缩包复制到 MYSQL 安装目录下并解压
    在这里插入图片描述

  2. 打开 Qt 自带的 mysql 工程
    路径:D:\Qt\Qt_5.15.2\5.15.2\Src\qtbase\src\plugins\sqldrivers\mysql
    在这里插入图片描述

  3. 修改 pro 文件
    在这里插入图片描述

  4. 修改 pri 文件
    在这里插入图片描述

  5. 用 mingw 编译器编译
    得到下图中3个文件,把 qsqlmysql.dll 拷贝到 D:\Qt\Qt_5.15.2\5.15.2\mingw81_64\plugins\sqldrivers
    在这里插入图片描述

  6. 用 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
    在这里插入图片描述

  7. 现在 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 数据库保姆级教程(上)
http://www.lryc.cn/news/270870.html

相关文章:

  • 【数据库原理】(1)数据库技术的发展
  • 【动态规划】【字符串】C++算法:正则表达式匹配
  • fgetc_fgets_getc_getchar
  • 12.30_黑马数据结构与算法笔记Java
  • 【电路笔记】-电容分压器
  • 线性代数基础知识
  • Linux Shell 016-文本比较工具diff
  • 八股文打卡day13——计算机网络(13)
  • android studio导入module
  • Prometheus通过consul实现自动服务发现
  • c++11--原子操作,顺序一致性,内存模型
  • 【数据结构】栈和队列(队列的基本操作和基础知识)
  • 设计模式——适配器模式(Adapter Pattern)
  • 测试C#使用OpenCvSharp从摄像头获取图片
  • 【基础】【Python网络爬虫】【12.App抓包】reqable 安装与配置(附大量案例代码)(建议收藏)
  • LabVIEW在电机噪声与振动探测的应用
  • 编码器是什么,以光电编码器为例,说明一下光电编码器的名字由来,结构,原理,特点,用处
  • MySQL:主从复制
  • 【K8S 二进制部署】部署Kurbernetes的网络组件、高可用集群、相关工具
  • Ubuntu 常用命令之 locate 命令用法介绍
  • java中file类常用方法举例说明
  • 机器学习分类模型
  • LaTeX符号大全:打破排版的边界
  • vue3-11
  • 【c语言】飞机大战2
  • 海康visionmaster-渲染控件:渲染控件加载本地图像的方法
  • 【SD】一致性角色 - 同一人物 不同姿势 - 2
  • 摩尔线程S80对于软件的支持
  • 基数排序 RadixSort
  • Maven下载和安装的详细教程