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

  • 相关阅读:
    Steps to Writing Well----Reading Notes
    How to Improve Reading Skills
    Requirement-Driven Linux Shell Programming
    Linux tar command usage
    MVC和MVVM模型
    js中特殊的宏任务
    js 超浓缩 双向绑定
    JavaScript 中的遍历详解
    多段动画整合为一个动画的思路
    Js事件循环(Event Loop)机制
  • 原文地址:https://www.cnblogs.com/iriczhao/p/11710693.html
Copyright © 2020-2023  润新知