qt链接mysql报错:QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QODBC QO

  以前使用Qt链接mysql数据库,遇到过这样的报错,后来解决了,但没有记录下来,此次又遇到了,花了好多的精力,此次吸收上次的教训,作一下记录和总结。mysql

  报错截图:sql

 

 

 

编辑背景:
  Qt5.13.0,编译器是mingw73_64,是64位的。
  mysql-5.7.27-winx64,也是64位的。
  有人说,qt的编译器的位数要和数据库的位数是一致的,我没试过不一样位数行不行,反正个人都是64位的。数据库

 

问题:spa

  使用<QSqlDatabase>库进行mysql的链接操做,出现下面的报错信息,固然别忘了在.pro文件里的QT += sql
  QSqlDatabase: QMYSQL driver not loaded
  QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7插件


问题分析:debug

  根据上网查资料,还有最后本身的实践,结论就是:qt里没有和mysql的链接插件,就是缺乏qmysql.dll,
有人说,只要把mysql安装目录下的lib文件夹下的libmysql.dll复制到qt的编译器的bin目录下就好了,我试过了,然并卵。

解决操做:
  注意: 下方出现的路径中,路径的前段部分(软件的安装位置)每一个人可能都不同,可是路径的后段部分应该是同样的,请自行修改。blog

  1.先去本身的qt安装目录下去看有没有mysql的插件,个人位置是:H:\QT\Qt5.13.0\5.13.0\mingw73_64\plugins\sqldrivers
进去一看,没有mysql的相关插件(qmysql.dll),那么就网上查找方法,有人说要利用mysql的库和qt里的Src里的mysql源码来编译出mysql的dll文件。教程

  


  2. 那么开动,先找到qt源码里的mysql的源码(PS:若是你在安装qt的时候,没有选择安装qt的源码,建议重装吧。我也是这样的。。。,随便提一句,如今安装qt是须要帐号登录的,否则下一步是灰色的,帐号到qt官网注册就好了。),个人路径是:H:\QT\Qt5.13.0\5.13.0\Src\qtbase\src\plugins\sqldrivers\mysql,双击打开mysql.pro,添加下面的三行代码:

INCLUDEPATH += H:/mysql-5.7.27-winx64/include/    # 添加你本身的mysql安装目录下的include文件夹
LIBS += H:\mysql-5.7.27-winx64\lib\libmysql.lib    # 添加你的mysql安装目录下的lib文件夹下的libmysql.lib文件
DESTDIR = ../mysql/mysqlDll    # 设置编译好的qmysql.dll放置的目录,否则你可能不知道会生成在哪。编译器


好了,点击qt左下角的小锤子,也就是构建按钮,出现以下的两个错误:
Cannot read H:/qtsqldrivers-config.pri: No such file or directory
Project ERROR: Library 'mysql' is not defined.源码

问题1:

  第一个问题是说没有这样的文件,看了下,的确没有这个文件,可是找到了相似的文件,我在个人文件夹:
H:\QT\Qt5.13.0\5.13.0\Src\qtbase\src\plugins\sqldrivers下,找到了configure.pri这个文件,那么咱们就把原来须要qtsqldrivers-config.pri的地方改为configure.pri试试下呗。


解决:
  在qt里的左侧栏里,双击qsqldriverbase.pri打开该文件,将第四行注释掉,也就是前面加个#号,这样:
#include($$shadowed($$PWD)/qtsqldrivers-config.pri),而后添加include(./configure.pri),保存,完成。

 

问题2:

  Library 'mysql' is not defined,这个最好解决,你说未定义,那我就不要了呗,在qt左侧栏中双击打开mysql.pro,将第六行注释掉,这样:#QMAKE_USE += mysql,搞定!这个办法是看到一个大佬的教程,像我这样中规中矩的老实人,看到未定义第一想法确定是找是否是头文件没找到?那这样就解决不了问题了。

 

上面的操做完,咱们的mysql.pro文件和qsqldriverbase.pri文件分别是:

 

 


那么,咱们保存下上面的修改,再次点击左下角的小锤锤,没有报错,一切安好。我怀着忐忑的心情,找到以前我指定的编译好dll放置的路径,个人是:H:\QT\Qt5.13.0\5.13.0\Src\qtbase\src\plugins\sqldrivers\mysql\mysqlDll,一看果真有qsqlmysql.dll和qsqlmysqld.dll,一个是release版,一个是debug版,这个就是qt链接mysql数据库的桥梁啊。



最后,咱们只需两步操做,就彻底搞定了。

第一步:

  将这两个生成的dll,复制到qt的编译器下的sqldrivers文件夹里,个人是:
H:\QT\Qt5.13.0\5.13.0\mingw73_64\plugins\sqldrivers\,OK,继续下一步。


第二步:

  将本身的mysql安装目录下的lib文件夹下的libmysql.dll,复制到qt的编译器的bin目录下,个人是:
H:\QT\Qt5.13.0\5.13.0\mingw73_64\bin,到这里就所有结束了,再次运行本身写的程序,链接mysql就彻底没问题了。

总结:
1. 看到有人会遇到这样的报错,提示没有mysql.h这个头文件,这个头文件在mysql安装目录下的include文件夹里,我并无遇到这状况,因此也不清楚具体是啥状况。
2. 看到大部分教程是将libmysql.dll复制到qt的编译器下的bin目录里就搞定了,但不少人试了没成功,那多是由于,他们安装的qt的插件库里自己就有qsqlmysql.dll这样的插件。因此除了复制libmysql.dll,还要到本身的plugins文件夹看下有没有qsqlmysql.dll这样的插件,这个是qt链接mysql的桥梁,没有桥怎么链接呢。
3. 再次感谢那些作正确教程和深刻研究解决问题的大佬,大家辛苦了。为了避免让成功案例沉底,小弟我就在这献丑了。

相关文章
相关标签/搜索