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当前开发环境下有哪些可用的数据库驱动程序)

原文地址:https://www.cnblogs.com/iriczhao/p/11710693.html