QMYSQL driver not loaded错误解决方案

解决Qt应用程序连接MySQL数据库失败的问题,通过编译QMYSQL驱动并添加MySQL扩展包,实现Qt与MySQL数据库的成功连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

("QSQLITE", "QODBC", "QODBC3", "QPSQL", "QPSQL7")
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7
"Driver not loaded Driver not loaded"

本工程项目(解决方案)开发环境为:

(1)操作系统:Windows10

(2)MySQL版本为:8.0 MySql下载

(3)Qt版本为:5.14.1 Qt5.14.1下载

(4)QtCreator版本 为:4.11.0

分析”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)支持的数据库如下:

Driver nameDBMS
QDB2IBM DB2 (version 7.1 and above)
QIBASEBorland InterBase
QMYSQLMySQL (version 5.0 and above)
QOCIOracle Call Interface Driver
QODBCOpen Database Connectivity (ODBC) - Microsoft SQL Server and other ODBC-compliant databases
QPSQLPostgreSQL (versions 7.3 and above)
QSQLITE2SQLite version 2Note: obsolete since Qt 5.14
QSQLITESQLite version 3
QTDSSybase Adaptive ServerNote: obsolete since Qt 4.7

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

编译MySQL驱动

(一)编译驱动

查阅计算机Qt安装路径:E:\ProgramData\Qt\Qt5.14.1\5.14.1\mingw73_64\plugins\sqldrivers 的sqldrivers插件,如下
在这里插入图片描述
 发现其中没有与MySQL相关的驱动插件。

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

1、使用QtCreator打开mysql.pro项目E:\ProgramData\Qt\Qt5.14.1\5.14.1\Src\qtbase\src\plugins\sqldrivers\mysql

打开项目文件(初始内容)如下
在这里插入图片描述
对照的修改为以下内容
在这里插入图片描述
给出代码,自行复制替换

TARGET = qsqlmysql

HEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp

#QMAKE_USE += mysql

OTHER_FILES += mysql.json

PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)
#该路径是的Mysql的头文件(include)路径
INCLUDEPATH +="E:\Program Files\MySQL\mysql-8.0.18-winx64\include"
#这是MySQl的库文件路径
LIBS +="E:\Program Files\MySQL\mysql-8.0.18-winx64\lib\libmysql.lib"
#为了方便查找,不妨增加一条语句,该语句用来指明编译后的结果输出的位置
DESTDIR = ../mysql/lib/

添加完之后编译程序(注意:此处使用的是MinGw64位)
在这里插入图片描述
编译成功后E:\ProgramData\Qt\Qt5.14.1\5.14.1\Src\qtbase\src\plugins\sqldrivers\mysql目录下会多出一个lib目录

在这里插入图片描述

2、将这三个文件复制到E:\ProgramData\Qt\Qt5.14.1\5.14.1\mingw73_64\plugins\sqldrivers

在这里插入图片描述

(二)添加MySql扩展包

添加MySQL连接的扩展包libmysql.dlllibmysql.lib,这个包在我们的MySql安装目录E:\Program Files\MySQL\mysql-8.0.18-winx64\lib中;
将扩展包添加到Qt安装目录E:\ProgramData\Qt\Qt5.14.1\5.14.1\mingw73_64\bin中:
在这里插入图片描述
至此,Qt可以连接到MySQL数据库了。

### 解决 QMYSQL 驾驶未加载问题的分析与方法 在 Linux 系统中,QMYSQL 驱动未加载的问题通常与 Qt 库的配置、MySQL 安装以及环境变量设置有关。以下是可能的原因及解决方案: #### 1. 检查 MySQL 开发库是否安装 QMYSQL 驱动需要 MySQL 的开发库(`libmysqlclient-dev` 或 `mariadb-client`)。如果系统中缺少这些库,驱动将无法正常加载。 ```bash sudo apt-get install libmysqlclient-dev ``` 确保安装完成后重新编译或链接 QMYSQL 驱动[^1]。 #### 2. 配置 Qt SQL 插件 Qt 提供了对多种数据库的支持,但默认情况下可能未启用 QMYSQL 驱动。可以通过以下步骤重新构建 QMYSQL 插件: - 进入 Qt 源代码目录中的 SQL 插件路径: ```bash cd /path/to/qt/src/plugins/sqldrivers ``` - 使用 qmake 构建插件: ```bash qmake "INCLUDEPATH+=/usr/include/mysql" "LIBS+=-lmysqlclient_r" mysql.pro make sudo make install ``` 上述命令会将 QMYSQL 插件重新编译并安装到 Qt 的插件目录中[^2]。 #### 3. 检查动态链接库路径 如果 MySQL 动态链接库(如 `libmysqlclient.so`)未正确加载,可能会导致驱动加载失败。可以通过以下方式验证和修复: - 检查动态链接库路径: ```bash ldconfig -p | grep libmysqlclient ``` - 如果未找到相关库,可以手动添加路径到 `/etc/ld.so.conf.d/mysql.conf` 文件中,并运行以下命令更新缓存: ```bash echo "/usr/lib/mysql" | sudo tee -a /etc/ld.so.conf.d/mysql.conf sudo ldconfig ``` #### 4. 环境变量配置 确保 MySQL 的库路径已添加到 `LD_LIBRARY_PATH` 中。例如: ```bash export LD_LIBRARY_PATH=/usr/lib/mysql:$LD_LIBRARY_PATH ``` 将此行添加到用户的 `.bashrc` 文件中以永久生效。 #### 5. 验证驱动是否可用 使用以下命令测试 QMYSQL 驱动是否成功加载: ```bash qtchooser -run-tool=qsqltdriverinfo -tool-version ``` 如果 QMYSQL 列表中可见,则说明驱动已正确加载。 #### 6. 调试输出 如果仍然无法加载驱动,可以通过调试输出获取更多信息。在 Qt 应用程序中启用调试日志: ```cpp #include <QSqlDatabase> #include <QDebug> int main(int argc, char *argv[]) { QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); qDebug() << db.lastError().text(); return 0; } ``` 运行此代码后,检查输出的日志信息以定位具体问题。 --- ### 示例代码:手动加载 QMYSQL 驱动 以下是一个简单的示例,展示如何手动加载 QMYSQL 驱动: ```cpp #include <QCoreApplication> #include <QSqlDatabase> #include <QSqlDriver> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 尝试加载 QMYSQL 驱动 QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); if (!db.isValid()) { qDebug() << "Failed to load QMYSQL driver"; qDebug() << QSqlDatabase::drivers(); // 查看当前支持的驱动 } else { qDebug() << "QMYSQL driver loaded successfully"; } return a.exec(); } ``` --- ### 注意事项 - 确保 MySQL 和 Qt 的版本兼容。 - 如果使用 MariaDB 替代 MySQL,请确保安装了对应的开发库(`libmariadb-dev`)。 - 如果问题仍未解决,可以尝试从源代码重新编译 Qt[^3]。 ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值