使用了QSqlDatabase数据库,报错:Driver not loaded

在使用Qt的QSqlDatabase连接SQLite数据库时,遇到'Driver not loaded'错误。问题出现在未将必要的Qt库文件和驱动添加到运行路径下。解决方法是将Qt安装目录下的Qt5Sql.dll和sqldrivers文件夹复制到程序运行目录,确保所有依赖项完整。

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

1.环境

(1)已经安装了sqlite;

(2)qt-opensource-windows-x86-msvc2010_opengl-5.4.0.exe;

(3)使用vs2010来开发。


2.现象

若加入如下代码:

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");

         db.setDatabaseName("scooters.dat");

         if (!db.open()) {

                  

### 问题分析 `QSqlDatabase: QMYSQL driver not loaded` 是 Qt 开发者在尝试连接 MySQL 数据库时常遇到的一个错误。该错误的核心原因是 Qt 的 SQL 插件未能成功加载 `QMYSQL` 驱动程序,这可能由多种因素引起。 以下是可能导致此问题的原因及其解决方案: --- ### 可能原因及解决方案 #### 1. **缺少必要的动态链接库** 如果系统的环境变量 PATH 中未包含 MySQL 安装目录下的 `libmysql.dll` 或其他必要依赖项,则会导致驱动无法加载。 - 确保将 MySQL 安装路径中的 `libmysql.dll` 添加到系统 PATH 环境变量中[^3]。 - 替代方法是手动将 `libmysql.dll` 复制到 Qt 的 bin 目录下(例如:`D:\Qt\5.12.3\mingw73_64\bin`)[^3]。 #### 2. **MySQL 和 Qt 版本不匹配** 不同版本的 MySQL 库可能与特定版本的 Qt 不兼容。如果使用的 `libmysql.dll` 来自较新版本的 MySQL 而 Qt 支持的是旧版库文件,则可能出现加载失败的情况。 - 下载并替换为与当前 Qt 版本兼容的 `libmysql.dll` 文件。可以从 GitHub 上找到经过验证的老版本库文件[^3]。 - 使用 Qt 提供的源码重新构建适用于目标平台的插件也是一个可行的选择[^4]。 #### 3. **SQL 插件未正确编译或部署** 默认情况下,某些 Qt 安装包可能不会自动包含已编译好的 `qsqlmysql.dll` 插件。因此需要自行编译支持 MySQL 的插件。 - 打开 Qt 源码目录中的 mysql.pro 工程文件,并按照官方文档说明完成配置和编译过程[^4]。 ```bash qmake "INCLUDEPATH+=C:/Program Files/MySQL/MySQL Server X.X/include" \ "LIBS+=C:/Program Files/MySQL/MySQL Server X.X/lib/libmysql.lib" mysql.pro make ``` #### 4. **认证协议冲突** 即使解决了驱动加载问题,在实际建立数据库连接时仍有可能因为服务器端启用了新型加密方式而报错,比如 `Authentication plugin 'caching_sha2_password' cannot be loaded`。 - 修改客户端默认密码算法以适应老式接口;或者更新至最新稳定发行版从而全面支持现代安全机制[^3]。 --- ### 示例代码片段 下面展示了一段用于测试 MySQL 连接功能的小型应用程序示例: ```cpp #include <QCoreApplication> #include <QSqlDatabase> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); if (!db.isValid()) { qDebug() << "Driver is invalid!"; } else { db.setHostName("localhost"); // 设置主机名 db.setDatabaseName("test_db"); // 设定要访问的数据集名称 db.setUserName("root"); // 用户账号 db.setPassword(""); // 对应密码 bool ok = db.open(); if (ok){ qDebug()<<"Connected successfully."; } else{ qDebug()<<db.lastError().text(); } } return a.exec(); } ``` 注意调整上述设置值来适配个人环境中真实的数据库实例详情。 --- ### 总结 综上所述,“QSqlDatabase: QMYSQL driver not loaded”的根本成因主要集中在以下几个方面:缺乏适当版本的支持库、插件本身尚未被创建出来以及潜在的操作系统架构差异等方面。针对这些问题采取相应的措施即可有效消除此类障碍。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值