• QT连接MySQL数据库,手动编译动态链接库,解决QMYSQL driver not loaded错误


    添加补充的的:
    注意:qsqlmysqld.dll 与 qsqlmysql.dll都要放入sqldrivers文件夹,一个是编译debug模式时用的,一个是release模式用的

    如果打包还要把MySQL安装目录下的bin目录中的libmysql.dll手动复制到打包目录下

    首先,在网上有些说法是直接把MySQL里的动态链接库libmysql.dll放到QT安装目录下的,是无法解决QMYSQL driver not loaded错误错的,不知道这些人有没有测试。通过查看QT安装目录插件文件夹中关于数据库的动态链接库,没有mysql的。路径为:

    ***\Qt\Qt5.12.12\5.12.12\mingw73_64\plugins\sqldrivers
    
    • 1

    在这里插入图片描述
    MySQL5.7的64位库已经打好了,可以直接下载:https://download.csdn.net/download/ren365880/86247243

    手动编译

    首先打开QT安装目录下的源码包,找到mysql的文件夹:我的路径为下:

    D:\Qt\Qt5.12.12\5.12.12\Src\qtbase\src\plugins\sqldrivers\mysql
    
    • 1

    修改里面的2个文件,请用QT打开,因为修改后还需要用QT编译。

    打开mysql.pro文件
    注释掉QMAKE_USE += mysql
    结尾添加几行代码:
    # 添加你自己的mysql安装目录下的include文件夹
    INCLUDEPATH += "C:\tool\MySQL\include"
    # 添加你的mysql安装目录下的lib文件夹下的libmysql.lib文件
    LIBS += "C:\tool\MySQL\lib\libmysql.lib"
    # 设置编译好的qmysql.dll放置的目录,不然你可能不知道会生成在哪。
    DESTDIR = ../mysql/mysqlDll
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    打开qsqldriverbase.pri文件
    注释掉include($$shadowed($$PWD)/qtsqldrivers-config.pri)
    当前路径的上层路径sqldrivers\中并没有这个qtsqldrivers-config.pri文件,只有configure.pri文件。
    改为:
    #include($$shadowed($$PWD)/qtsqldrivers-config.pri)
    include(./configure.pri)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述
    修改完成这里后点击QT的锤子图标进行编译,编译过程中如果失败看一下路径是不是有中文,空格之类的。
    成功后如下图:
    在这里插入图片描述
    把qsqlmysqld.dll复制到QT安装目录下的

    **\Qt\Qt5.12.12\5.12.12\mingw73_64\plugins\sqldrivers
    
    • 1

    这是再去链接MySQL就成功了。

    如何链接MySQL,连接多个数据库

    首先项目的.Pro文件中加入

    QT += sql
    
    • 1

    mainwindow.h文件中引入库

    #include 
    
    • 1

    然后再.cpp中就可以使用了

     第二个参数为连接的名称,这里设置的不同,就可以有不同的链接对象,能连接多个数据库
     QSqlDatabase from = QSqlDatabase::addDatabase("QMYSQL","from");
     from.setHostName(ip);127.0.0.1
     from.setPort(port);3306
     from.setDatabaseName(ui->fromDatabase->text());数据库名
     from.setUserName(name);账号
     from.setPassword(passowrd);密码
     fromStatus = from.open();是否打开
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

  • 相关阅读:
    HTTPS中间人攻击实验
    NX/UG二次开发—3D几何—多边形内部最大圆
    第五节——Vue 中如何编写样式
    TDengine 入门教程⑧——数据库管理工具 | DBeaver 连接 TDengine
    Redis—3种特殊数据类型
    来用Vite+React快速开发浏览器插件
    毕业季 | 在不断探索中拟合最好的自己
    Intellij IDEA--解决项目名后带中括号的问题
    域名是什么 有什么用
    axios源码学习
  • 原文地址:https://blog.csdn.net/ren365880/article/details/125909763