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

作者:billy

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

前言

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

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

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

  2. 测试代码如下:

    #include
    #include
    #include

    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;

    }

  3. 此时运行代码会报错,提示你 没有加载 QMYSQL 数据库的驱动

  4. 上面提示了目前可用的数据库驱动,没有 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 的安装路径下

更多请参考

相关推荐
PaperData2 小时前
1985-2025年全国区县专利申请与授权面板数据
数据库
snpgroupcn2 小时前
大数据量SAP迁移方案:系统越大,越不能硬搬
数据库·sap
Flynt3 小时前
Redis Cluster主节点挂了,为什么"高可用"还全员掉线?我把三次kill的记录翻出来了
数据库·redis·分布式
笃行3503 小时前
KingbaseES 数据加密全解:从 SSL 到全密态
数据库
Ivanqhz4 小时前
激活函数在 Transformer 中的作用及各种变体简述
java·linux·数据库·人工智能·深度学习
java1234_小锋5 小时前
【技术专题】Mysql8 数据库 - Mysql8 数据类型简介
数据库·mysql
知行EDI5 小时前
知行之桥 MaBang 端口使用指南——Create Order 订单创建篇
java·服务器·数据库
成旭先生5 小时前
【2026】企业信息模糊查询 API 实战:名称、注册号、统一社会信用代码、企业类型与法人一次查全
服务器·数据库·数据服务
JosieBook5 小时前
【数据库】MySQL 实战精通系列 · 第10篇:分库分表与分布式事务实战
数据库·分布式·mysql
我叫洋洋6 小时前
Cadence CIS 元器件库合并实战:3000+ 焊盘、156 个符号零冲突并入自有库
数据库·单片机·嵌入式硬件·oracle·电路