解决 QSqlDatabase QMYSQL driver not loaded

在Qt编程中遇到Mysql引擎加载失败时,可以通过修改qt源码中的mysql.pro文件,指定正确的mysql库路径并重新构建生成dll文件,然后将这些库文件和dll拷贝到相应Qt目录及项目目录下。在软件发布时,确保将sqldrivers和dll文件包含在exe文件夹中,以保证软件正常运行。

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

Qt编程中使用Mysql数据库的一个常见的错误,就是默认情况下Mysql引擎加载失败的问题。

1、打开qt源码(在安装qt的时候需要勾选source才会有,如果没有的则需要在控制面板中对Qt安装进行更改或者干脆重装),以我的Qt5.13为例,使用Qt Creator打开其中的mysql.pro文件,工程位于(找自己安装的位置)。

 按照下面修改mysql.pro文件

mysql库的路径也需要修改成自己的mysql安装的位置。

修改完成后进行构建,就可以在mysql.pro同级的lib目录下找到编译生成的文件qsqlmysql.dll和qsqlmysqld.dll。

2、将生成的这两个库拷贝到下面的目录里(找自己的对应位置)。

3、拷贝mysql安装文件夹下的lib文件夹中的libmysql.lib和libmysql.dll到Qt的bin目录下,重新启动项目,测试连接。

 4、测试

 可加载的引擎列表:

成功了,连接也没有问题! 

5、最后一个重要的问题,如果软件已经发布,想让软件正常的使用mysql库,需要将sqldrivers和dll文件放到exe文件夹中,否则还是会发生加载引擎失败的情况:

 

### 解决QSqlDatabase QMYSQL Driver Not Loaded 的方案 当遇到 `QSqlDatabase: QMYSQL driver not loaded` 错误时,通常是因为 Qt 没有正确配置 MySQL 驱动程序。以下是详细的解决方案: #### 1. 安装必要的依赖项 确保已安装所需的开发库和工具链来支持 MySQLQt 插件的编译。对于 Windows 用户,需下载并安装适用于操作系统的 MySQL 开发包[^2]。 #### 2. 获取源码并准备环境 进入 Qt 源代码目录中的插件部分,具体路径如下: ```plaintext D:\MyProgram\Qt5.14\5.14.2\Src\qtbase\src\plugins\sqldrivers\ ``` 确认该位置存在用于构建 SQL 数据库驱动的相关文件[^3]。 #### 3. 编辑 pro 文件以适配本地设置 打开 `mysql.pro` 文件,在其中指定 MySQL 库的位置及相关参数。例如: ```makefile INCLUDEPATH += C:/mysql/include LIBS += -LC:/mysql/lib -lmysqlclient ``` 上述命令假设 MySQL 被安装到默认路径下;如果实际安装路径不同,则应调整为对应的实际地址[^1]。 #### 4. 使用 qmake 工具生成 Makefile 并执行构建过程 运行以下命令完成重新编译工作: ```bash qmake mysql.pro nmake # 对于 MSVC 编译器而言 # 或者如果是 MinGW 则可能是 mingw32-make ``` 成功之后会在目标文件夹发现新创建出来的动态链接库 `.dll` 及其关联静态库 `.a` 文件。 #### 5. 将生成好的 DLL 放置至适当位置供应用程序调用 把刚才生成的 `qsqlmysql.dll` 移动或者复制到当前使用的 Qt 版本下的 plugins/sqldrivers 子目录里去覆盖旧版本的内容即可生效。 通过以上步骤可以有效解决关于无法加载 Mysql 驱动的问题,并使得基于 Qt 构建的应用能够正常访问 MySql 数据库服务资源。 ```python import sys from PyQt5.QtWidgets import QApplication, QMainWindow from PyQt5.QtSql import QSqlDatabase, QSqlQuery def test_mysql_connection(): db = QSqlDatabase.addDatabase('QMYSQL') db.setHostName("localhost") db.setDatabaseName("testdb") db.setUserName("root") db.setPassword("password") ok = db.open() if not ok: print(f"Failed to connect: {db.lastError().text()}") else: query = QSqlQuery(db) sql_command = "SELECT * FROM users LIMIT 5;" result = query.exec_(sql_command) if __name__ == "__main__": app = QApplication(sys.argv) window = QMainWindow() try: test_mysql_connection() except Exception as e: print(e) sys.exit(app.exec_()) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值