qt连接mysql报错:QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7

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

  报错截图:

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

问题:

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

问题分析:

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

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

  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. 再次感谢那些做正确教程和深入研究解决问题的大佬,你们辛苦了。为了不让成功案例沉底,小弟我就在这献丑了。

原文地址:https://www.cnblogs.com/dz-study/p/12382837.html

时间: 2024-08-14 21:20:52

qt连接mysql报错:QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7的相关文章

QSqlDatabase: QMYSQL driver not loaded 解决方法(debug下正常,release下报错)

环境: QT 5.11 Mysql 5.5 MSVC 2015 编译器 以上全为64位 症状为: Debug下连接数据库正常,Release下连接数据库失败 提示如下: QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7 注意,这种情况下根本就不需要手动编译Mysql driver,因为Qt已经自带了 按网上

QSqlDatabase: QMYSQL driver not loaded 解决方案

在Qt 5中使用数据库连接时,弹出下面的错误: QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7 从上面的错误可以看出,错误发生在MySQL数据库驱动并未加载. 对于这种错误一般有两种情况: 第一种:无MySQL驱动,那么检查 Qt\5.3\msvc2013_64_opengl\plugins 目录下是否有

连接mysql报错java.sql.SQLException: The server time zone value &#39;?й???????&#39; is unrecognized...解决方法

报错内容: java.sql.SQLException: The server time zone value '?й???????' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time

连接mysql报错:error 2003 (hy000):can&#39;t connect to mysql server on &#39;localhost&#39; (10061)

一.mysql 的bin目录下有个MySQLInstanceConfig.exe,运行就可以进行创建数据库实例,创建实例时也可以生成windows 服务,把服务设置成自动启动就可以了 二.安装在D盘的discuzz!打开后出现上述错误,请问应如何处理?winmysqladmin已经启动,但三色树上有一个小红点如果出现"ERROR 2003: Can't connect to MySQL server on 'localhost' (10061)",说明你的MySQL还没有启动.解决办法

PHP连接MySQL报错:SQLSTATE[HY000] [2002] Can&#39;t connect to local MySQL server through socket &#39;MySQL&#39; (2)

如下所示,PHP连接MySQL报错: SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket 'MySQL' (2) 测试代码如下: <?php try { $dsn = 'mysql:dbname=php-note;host=localhost;port=3306;charset=utf8'; $username = 'root'; $password = 'root'; new PDO( $dsn,

jdbc连接mysql报错:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column &#39;&#233;?‘&#229;?‰&#230;—&#173;&#39; in &#39;field list&#39;

解决了中文显示乱码问题之后,又出现了这么一个问题, 思考一下,这绝对是输入文本的问题. 试了一下,果然不出所料. 再次怀疑编码,没有办法, 只有很无奈地去百度了,结果是与编码没有问题啊. sql.execute("insert into reader values('"+rn+"','"+pid+"','"+tele+"','"+kno+"')"); 原来报错是因为我没写单引号,mysql当然不认识啊.OK

1130 - Host&#39;xxx.xxx.xxx.xxx&#39; is not allowed to connect to this MySQL server解决Navicat连接MySQL报错

最近使用Navicat for MySQl访问远程mysql数据库,出现报错,显示"1130 - Host'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server".解决办法如下: 方法/步骤 首先看报错窗口. 经查阅,错误原因是:本地IP(xxx.xxx.xxx.xxx)没有访问远程数据库的权限. 于是下面开启本地IP(xxx.xxx.xxx.xxx)对远程mysql数据库的访问权限. 首先远程连接进入服务器,在

连接mysql报错Access denied for user &#39;root&#39;@&#39;localhost&#39; (using password: YES)解决办法

1.打开MySQL目录下的my.ini文件,在文件的最后添加一行"skip-grant-tables"(免密码登录),保存并关闭文件,重启MySQL服务. 2.通过命令行进入MySQL的BIN目录,输入"mysql -u root -p"(不输入密码),回车即可进入数据库. 3.执行"use mysql;",使用mysql数据库. 4.修改密码:执行" update MySQL.user set authentication_strin

用Navicat连接mysql报错:2003-Can&#39;t connect to MySql server on &#39;10.100.0.109&#39;(10039)

问题描述 在 window 系统上,用 Navicat 连接 Mysql 数据库,弹出以下提示 问题原因  Mysql 数据库未启动 解决方案:启动 Mysql 数据库 1.点击桌面左下角运行 cmd,然后回车 2.输入命令:services.msc,然后回车,弹出服务页面 3.在服务页面找到 MySQL服务,查看状态,如果未启动,就启动服务 用Navicat连接mysql报错:2003-Can't connect to MySql server on '10.100.0.109'(10039)