• Qt-解决Qt与MySQL连接过程中出现“QSqlDatabase: QMYSQL driver not loaded”问题


    写在前面:

      本文内容包括:

      (1)分析”QSqlDatabase: QMYSQL driver not loaded”出现的原因

      (2)解决“QSqlDatabase: QMYSQL driver not loaded”的方法总结

    一、背景

      在使用Qt操作MySQL数据库过程中,使用Qt编写好连接MySQL数据库的的代码后,编译调试时报错QSqlDatabase: QMYSQL driver not loaded,意味着Qt应用程序与MySQL数据库连接失败。报错如下图所示:

          

      本工程项目开发环境为:

      (1)操作系统:Windows

      (2)MySQL版本为:8.0

      (3)Qt版本为:5.13

      (4)QtCreator版本 为:4.9.1

    二、分析”QSqlDatabase: QMYSQL driver not loaded”出现的原因

      根据上图的报错提示,查阅官方文档,链接:https://doc.qt.io/qt-5/sql-driver.html#qmysql-for-mysql-4-and-higher,得到相关信息,如下

      (1)Qt SQL模块使用驱动程序插件与不同的数据库api进行通信。

      (2)支持的数据库如下:

                   

      根据报错信息提示可用的drivers是: QSQLITE QODBC QODBC3 QPSQL QPSQL7,其中没有QMYSQL驱动。于是乎定位问题出现的原因是:缺少QMYSQL驱动。

      

    查阅计算机Qt安装路径:D:ProgramFilesQt5.13.0mingw73_32pluginssqldrivers 的sqldrivers插件,如下

      发现其中没有与MySQL相关的驱动插件。

    三、解决“QSqlDatabase: QMYSQL driver not loaded”的方法总结

      原来Qt5.13版本下不包含有驱动MySQL的驱动插件,那么就需要自己编译插件了。编译插件的过程如下:

      在编译插件之前需准备两个源码包:

      (1)需要一个与MySQL连接的扩展包:mysql-connector-c-6.1.3-win32,资源下载链接为:https://dev.mysql.com/downloads/file/?id=450611

      (2)Qt的源码,在安装Qt的时候,可以选择安装资源来确保同时将Qt的源码也安装到自己的电脑上。

      两个源码包的资源文件如下图所示:

                  

              

      接下来,开始编译源码,如何编译Qt源码这里不细说了。

      (1)使用windows命令行切换到该MySQL驱动工程路径下,使用qmake生成相应的makefile文件。

      

      (2)使用mingw32-make编译该工程。

          

       在编译过程中,出现了如下错误:

         

      提示在qsql_mysql_p.h头文件中找不到mysql.h的头文件。说明mysql.头文件没有引入到该工程中。于是在该工程的.pro文件中添加包含路径和库文件路径,添加后文件如下:

           此处添加了用于MySQL连接的扩展包:mysql-connector-c-6.1.3-win32的头文件和资源路径

      添加完成后,重新使用qmake工具生成makefile文件,然后使用mingw32-make编译该工程文件,编译完成后,可以使用mingw32-make install完成插件的安装,也可以不用,手动复制插件到指定路径即可。编译完成后,将生成如下MySQL的驱动组件:

          

        (路径为D:ProgramFilesQt5.13.0Srcqtbasesrcpluginssqldriverspluginssqldrivers)

      (3)将其中的qsqlmysql.dll文件和qsqlmysqld.dll文件复制到 D:ProgramFilesQt5.13.0mingw73_32pluginssqldrivers,注意这里是D:ProgramFilesQt5.13.0mingw73_32文件夹中

       (4)进行测试,在QtCreator中编译运行自己写好的MySQL连接程序,又出现报错,如下图:

      

      此时分析报错,QMYSQL驱动已经存在,然而依然不能连接到MySQL数据库。于是将MySQL连接的扩展包:mysql-connector-c-6.1.3-win32中的lib文件夹下的libmysql.dll和libmysql.lib(该ibmysql.lib文件可以不要)文件复制到Qt构建套件路径D:ProgramFilesQt5.13.0mingw73_32in下,如下图:

      

      重新测试,于是乎可以连接到MySQL数据库了。

     (四) 总结

      总而言之,使用了Qt sql模块来操作MySQL数据库,需要三个库文件来支持,分别为:libmysql.dll、qsqlmysql.dll文件和qsqlmysqld.dll文件,三个文件缺一不可。若在Qt安装路径的插件文件夹路径下(D:ProgramFilesQt5.13.0mingw73_32pluginssqldrivers )找不到对应的驱动扩展,那么就需要编译相应的驱动扩展文件到相应路径。同时要将用于与MySQL连接的扩展包:mysql-connector-c-6.1.3-win32文件下的libmysql.dll库文件复制到Qt构建套件路径D:ProgramFilesQt5.13.0mingw73_32in文件夹中,确保能与MySQL连接成功。

      (注:在使用Qt编写数据库连接层代码时,可以使用QSqlDatabase::drivers()方法来查看Qt当前开发环境下有哪些可用的数据库驱动程序)

  • 相关阅读:
    ClickOnce發布經驗
    reporting Server組件不全引起的致命錯誤
    異步調用
    Usercontrol Hosted in IE
    MATLAB命令大全(转载)
    一种保护眼睛的好方法
    关于oracle自动编号
    An Algorithm Summary of Programming Collective Intelligence (1)
    An Algorithm Summary of Programming Collective Intelligence (3)
    An Algorithm Summary of Programming Collective Intelligence (4)
  • 原文地址:https://www.cnblogs.com/iriczhao/p/11710693.html
Copyright © 2020-2023  润新知