QMYSQL driver not loaded错误解决方案

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

在使用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

### QMySQL驱动未加载的解决方案 QMySQL驱动未加载的问题通常发生在QT尝试连接MySQL数据库时,错误提示为“QSqlDatabase: QMYSQL driver not loaded”。以下是详细的解决方法: #### 1. 检查是否安装了MySQL驱动 如果QT环境中没有正确安装MySQL驱动程序,可能会导致此问题。需要确认QT是否已经编译并包含了QMYSQL插件。如果没有,可以通过以下步骤解决: - 在QT源代码目录中找到`qtbase/src/plugins/sqldriver/mysql`文件夹,并确保该路径存在。 - 如果不存在,可能需要手动下载并配置MySQL驱动。 #### 2. 配置libmysql.dll 确保`libmysql.dll`文件已正确放置在QT的bin目录下。具体操作如下: - 将`libmysql.dll`文件复制到QT安装路径下的`bin`目录,例如:`D:\Qt\Qt5.12.3\5.12.3\mingw73_64\bin`[^2]。 - 确保系统环境变量`Path`中包含上述`bin`目录路径以及MinGW工具链的路径,例如:`D:\Qt\Qt5.12.3\Tools\mingw730_64\bin`[^2]。 #### 3. 编译QMYSQL插件 如果QT默认未提供QMYSQL插件,可以尝试手动编译: - 打开命令行工具,进入QT源代码目录下的`qtbase/src/plugins/sqldriver`文件夹。 - 使用以下命令进行编译: ```bash qmake "INCLUDEPATH+=C:\mysql\include" "LIBS+=C:\mysql\lib\libmysql.lib" mysql.pro nmake ``` - 编译完成后,将生成的`qsqlmysql.dll`文件复制到QT的插件目录,例如:`D:\Qt\Qt5.12.3\5.12.3\mingw73_64\plugins\sqldrivers`[^1]。 #### 4. 检查依赖项 使用工具如`Dependency Walker`检查`qsqlmysql.dll`是否存在缺失的依赖项。如果发现某些DLL文件未找到,需确保这些文件已正确安装并添加到系统路径中。 #### 5. 重启Qt Creator 完成上述配置后,重启Qt Creator以确保所有更改生效。重新编译项目并运行,验证问题是否解决。 --- ### 示例代码:连接MySQL数据库 以下是一个简单的示例代码,用于测试QMYSQL驱动是否正常工作: ```python import sys from PyQt5.QtSql import QSqlDatabase, QSqlQuery def test_mysql_connection(): db = QSqlDatabase.addDatabase("QMYSQL") db.setHostName("localhost") db.setDatabaseName("test_db") db.setUserName("root") db.setPassword("password") if not db.open(): print("Failed to connect to database:", db.lastError().text()) return False query = QSqlQuery() if query.exec_("SELECT * FROM users"): while query.next(): print(query.value(0), query.value(1)) else: print("Query failed:", query.lastError().text()) db.close() return True if __name__ == "__main__": success = test_mysql_connection() sys.exit(0 if success else 1) ``` --- ### 注意事项 - 确保MySQL服务器已正确安装并运行。 - 如果仍然无法解决问题,可以尝试更换不同版本的QT或MySQL,以排除兼容性问题。 ---
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值