18:10:12: Starting C:\Users\86166\Desktop\项目\build-sqltest-Desktop_Qt_5_12_9_MinGW_64_bit-Debug\debug\sqltest.exe ... Available drivers: ("QSQLITE", "QMYSQL", "QMYSQL3", "QODBC", "QODBC3", "QPSQL", "QPSQL7")
时间: 2025-07-12 11:06:38 浏览: 21
### 问题分析
在使用 Qt 连接 MySQL 数据库时,出现 `QSqlDatabase: QMYSQL driver not loaded` 错误,并且可用驱动列表中包含 `QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7`。这表明 Qt 已经识别到 MySQL 驱动的存在,但未能成功加载该驱动。
---
### 可能原因及解决方案
#### 1. 确保插件路径正确设置
Qt 使用插件机制来支持不同的数据库驱动。即使驱动文件(如 `qsqlmysql.dll`)已经存在,若未放置在 Qt 插件搜索路径下,则无法加载。建议将插件文件放置在以下目录之一:
- `<Qt installation directory>/plugins/sqldrivers/`
- 或者,在应用程序运行目录下创建一个名为 `sqldrivers` 的子目录,并将插件复制到该目录下[^2]。
此外,可以通过编程方式指定插件路径:
```cpp
QApplication::addLibraryPath("path/to/plugins");
```
#### 2. 检查依赖库是否完整
即使驱动已编译并放置在正确位置,若缺少必要的 MySQL 动态链接库(DLL),也会导致驱动加载失败。需确保以下文件存在于运行环境的 PATH 路径或当前工作目录中:
- `libmysql.dll`
- `libeay32.dll`
- `ssleay32.dll`
这些文件通常位于 MySQL 安装目录下的 `bin` 文件夹中。应将其复制至应用程序可执行文件所在目录[^1]。
#### 3. 使用调试输出确认驱动加载状态
在代码中添加如下语句以检查 Qt 是否识别到了 MySQL 驱动:
```cpp
#include <QSqlDatabase>
#include <QDebug>
qDebug() << "Available drivers:" << QSqlDatabase::drivers();
```
如果输出中包含 `QMYSQL`,则说明驱动文件已找到,但可能因依赖缺失或其他问题未能加载。此时可尝试手动加载插件以获取更详细的错误信息:
```cpp
#include <QPluginLoader>
#include <QDebug>
QPluginLoader loader("path/to/qsqlmysql.dll");
QObject *plugin = loader.instance();
if (plugin) {
qDebug() << "Plugin loaded successfully";
} else {
qDebug() << "Failed to load plugin:" << loader.errorString();
}
```
此方法有助于定位插件是否因接口不匹配或依赖项缺失而无法加载[^3]。
#### 4. 编译和配置注意事项
在 `.pro` 文件中,确保已正确设置 MySQL 头文件和库路径:
```qmake
INCLUDEPATH += $$quote(C:\Program Files\MySQL\MySQL Server 8.0\include)
LIBS += -L$$quote(C:\Program Files\MySQL\MySQL Server 8.0\lib) -llibmysql
```
此外,还需包含基础插件配置文件:
```qmake
include(../qsqldriverbase.pri)
```
从 Qt 5.14 开始,官方不再提供预编译的 MySQL 插件,因此必须自行编译插件。不同版本的 Qt 对 MySQL 插件的支持程度不同,务必确保所使用的 MySQL 开发库版本与 Qt 编译器一致(如 MSVC 或 MinGW)[^4]。
---
### 示例代码:连接 MySQL 数据库
```cpp
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QMessageBox>
bool connectToMySQL()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1");
db.setDatabaseName("test_db");
db.setUserName("root");
db.setPassword("your_password");
if (!db.open()) {
QMessageBox::critical(nullptr, QObject::tr("Database Error"),
db.lastError().text());
return false;
}
QSqlQuery query;
if (query.exec("SELECT * FROM users")) {
while (query.next()) {
qDebug() << query.value(0).toString();
}
} else {
qDebug() << "Query failed:" << query.lastError().text();
}
return true;
}
```
---
阅读全文
相关推荐




















