VS+QT编译出现QMYSQL driver not loaded

本文讲述了JAVA开发工程师在使用QT5.14.1作为前端时遇到的QMYSQLdriver未加载问题,涉及版本不一致、配置调整及常见错误排查,提供了解决步骤和注意事项。

    身为JAVA开发工程师,项目需求开整QT做前端。遇到QMYSQL driver not loaded问题。感觉版本的问题是遇到开发编译过程中最多的。再此做以记录》》

 但凡出现:QMYSQL driver not loaded还是未加载QT5core.dll,以及debug编译正常还是release编译运行报错,亦或是未找到.cpp文件。

 起初处理QMYSQL driver not loaded时,QT版本是V5.14.1,显示缺少QTmysql 驱动。故此单独下载给配置后,该问题正常,但是又诱发了未加载QT5core.dll问题。核查后是QT的MySQL库文件用的版本不一致。当然,该问题也会诱发debug编译正常还是release编译运行报错。

所以针对QMYSQL driver not loaded问题的正确解决很关键。(使用QT连接MySQL的过程中出现:QSqlDatabase: QMYSQL driver not loaded、QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7、Sql connect failed、"Driver not loaded Driver not loaded"。)

原因:项目里面没有QMySQL的驱动导致的

解决方案:

1.在QT安装目录下导入或打开mysql.pro:F:\Qt5.14.1\5.14.1\Src\qtbase\src\plugins\sqldrivers\mysql

2.修改配置文件mysql.pro和qsqldriverbase.pri

mysql.pro修改如下:

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安装目录下
INCLUDEPATH+="D:\Program Files\mysql-5.7.35-winx64\include"
 

LIBS+="D:\Program Files\mysql-5.7.35-winx64\lib\libmysql.lib"
 
#构建生成对应版本的MySQL配置文件存放位置
DESTDIR="D:\Program Files\mysql-5.7.35-winx64\lib\abc"

 qsqldriverbase.pri修改如下:

QT  = core core-private sql-private

# For QMAKE_USE in the parent projects.
#include($$shadowed($$PWD)/qtsqldrivers-config.pri)


include(./configure.pri)


PLUGIN_TYPE = sqldrivers
load(qt_plugin)

DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII

清理后重新构建即可:

生成的dll如下:

而后将生成的dll全部拷贝到:

F:\Qt5.14.1\5.14.1\msvc2017_64\plugins\sqldrivers

完成后运行重新构建工程即可。

  如果出现如下问题则查看处理如下:

1)打开mysql.h文件失败,则查看参数mysql.pro配置路径是否正确或者是否有加“”。

2)出现:LNK1181: 无法打开输入文件“

D:\Program Files\mysql-5.7.35-winx64\lib.obj

       a) 关闭QT中其他项目保证只有一个mysql依赖生成项目

       b) 清除项目,进行重新构建,实在不行先清除项目-》关闭项目-》打开重新构建

   3) Library 'mysql' is not defined 找不到mysql,注释掉 #QMAKE_USE += mysql
 

 

 

 

<think>嗯,用户遇到了Qt 6.7.2中QMYSQL驱动未加载的问题,需要解决。首先,我得回忆一下Qt连接MySQL的常见问题。根据提供的引用,Qt 6.7.2默认没有MySQL驱动,需要自己编译或者获取预编译的驱动文件。 用户提到的错误信息是“QSqlDatabase: QMYSQL driver not loaded”,这说明Qt在运行时找不到对应的驱动插件。可能的原因有几个:驱动文件缺失、路径配置错误,或者依赖的MySQL客户端库没有正确安装。 接下来,我需要参考用户提供的引用内容。引用[2]指出Qt6.7.2默认没有MySQL驱动,需要手动安装。引用[3]建议检查驱动是否存在,并确保路径正确。引用[5]提到可以直接下载预编译的驱动文件,这可能是一个快捷的解决方案。 可能的解决步骤包括:首先确认Qt的安装路径和驱动插件的存放位置。通常驱动插件位于plugins/sqldrivers目录下。如果该目录下没有qsqlmysql.dll(Windows)或相应的.so文件(Linux),则需要编译或下载。 然后,编译驱动需要Qt的源代码和MySQL的客户端库。用户需要安装MySQL的库文件,例如libmysql.dll,并在编译时指定其路径。引用[4]提到脚本保存在特定路径,可能涉及使用qmake生成Makefile并编译。 另外,引用[5]提供了预编译的驱动文件,用户可以直接下载并放置到正确目录,这可能更简单,但需要注意版本兼容性,确保下载的驱动与Qt版本和编译器匹配。 还需要注意环境变量的问题,确保Qt能找到插件路径,或者在代码中设置插件路径。例如使用QCoreApplication::addLibraryPath()来添加插件目录。 最后,测试连接时,确保MySQL服务器运行正常,并且连接参数正确,比如主机名、端口、用户名、密码和数据库名。 总结步骤应该是:1. 检查现有驱动是否存在;2. 若不存在,编译或下载驱动;3. 配置Qt插件路径;4. 确保MySQL客户端库正确安装;5. 测试连接。同时需要处理不同操作系统下的差异,比如Windows的dll和Linux的so文件。</think>### Qt 6.7.2 QMYSQL驱动未加载的解决方案 #### 1. 检查驱动是否存在 在Qt安装目录的插件路径中检查是否已生成`qsqlmysql.dll`(Windows)或对应的`.so`文件(Linux)。默认路径为: $$D:\Qt\6.7.2\mingw_64\plugins\sqldrivers$$ 若该目录下无相关文件,需手动编译或下载驱动[^2][^3]。 --- #### 2. 编译MySQL驱动 **步骤:** 1. **安装MySQL客户端库** - Windows:从[MySQL官网](https://dev.mysql.com/downloads/installer/)下载`MySQL Connector/C++`,安装后记录库文件路径(如`C:\Program Files\MySQL\mysql-8.0\lib`)。 - Linux:通过包管理器安装`libmysqlclient-dev`: ```bash sudo apt-get install libmysqlclient-dev ``` 2. **编译驱动源码** - 进入Qt的驱动源码目录(参考引用[4]): ```bash cd D:\Qt\6.7.2\Src\qtbase\src\plugins\sqldrivers ``` - 使用`qmake`生成Makefile(需替换实际路径): ```bash qmake -- MYSQL_INCDIR="C:/Program Files/MySQL/mysql-8.0/include" MYSQL_LIBDIR="C:/Program Files/MySQL/mysql-8.0/lib" ``` - 执行`make`或`nmake`编译驱动。 3. **将生成的驱动文件复制到插件目录** 编译完成后,将`qsqlmysql.dll`(Windows)或`libqsqlmysql.so`(Linux)复制到: $$D:\Qt\6.7.2\mingw_64\plugins\sqldrivers$$ --- #### 3. 使用预编译驱动(替代方案) 若编译失败,可直接下载预编译的驱动文件(如引用[5]提供的GitHub仓库),需确保驱动版本与Qt版本和编译器(如MinGW/MSVC)匹配。将文件放入插件目录后重启应用。 --- #### 4. 配置环境变量(Windows) 确保MySQL客户端库路径(如`C:\Program Files\MySQL\mysql-8.0\lib`)被添加到系统`PATH`环境变量,或直接将`libmysql.dll`复制到Qt的`bin`目录: $$D:\Qt\6.7.2\mingw_64\bin$$ --- #### 5. 测试连接 在代码中初始化数据库连接: ```cpp QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("localhost"); db.setPort(3306); db.setUserName("root"); db.setPassword("password"); db.setDatabaseName("test_db"); if (!db.open()) { qDebug() << "Error:" << db.lastError().text(); } else { qDebug() << "Connected!"; } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道1993

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值