前言:
转载请附上连接,本帖原创请勿照抄。
使用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. 简述(给大家看一下我连接MySQL的代码)
main.cpp
#include <QApplication>
#include <QProcess>
#include<QStyleFactory>
int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;qDebug() << "Available drivers:";QStringList drivers = QSqlDatabase::drivers(); //获取现在可用的数据库驱动foreach(QString driver, drivers)qDebug() << driver;w.show();return a.exec();
}.h
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <qDebug>
QSqlDatabase db;
QSqlQuery query;.cpp
void MainWindow::connect_mysql()
{db = QSqlDatabase::addDatabase("QMYSQL");db.setHostName("localhost");db.setPort(3306);db.setDatabaseName("mysql");db.setUserName("root");db.setPassword("root");if (!db.open()) {qDebug("Sql connect failed.");qDebug() << db.lastError().text();} else {qDebug("Sql connected.");}query=QSqlQuery(db);QString sq="INSERT INTO db_mysql VALUES(0,'SY2020111917', 123, '进入深山', 60, 0);";bool res=query.exec(sq);if(!res){qDebug()<<"添加失败";}else{qDebug()<<"添加成功";}
}
一直出错都有点怀疑自己代码了,别怀疑自己这么简单的代码永远不会有毛病...
2. 找到QT自带的MySQL生成项目
F:\Qt\Qt5.14.1\5.14.1\Src\qtbase\src\plugins\sqldrivers\mysql 双击打开mysql.pro项目
3. 修改配置文件
这里有两个文件夹需要改动分别为:mysql.pro和qsqldriverbase.pri
qsqldriverbase.priQT = core core-private sql-private# For QMAKE_USE in the parent projects.
#include($$shadowed($$PWD)/qtsqldrivers-config.pri)#更方便准确的找到qtsqldrivers-config.pri文件
include(./configure.pri)PLUGIN_TYPE = sqldriversload(qt_plugin)DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII
mysql.proTARGET = qsqlmysqlHEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp#QMAKE_USE += mysqlOTHER_FILES += mysql.jsonPLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)#这个主要是添加.h依赖文件使用
INCLUDEPATH+=F:\MYSQL\mysql-5.7.24-winx64\include\#添加依赖的.lib文件
LIBS+=F:\MYSQL\mysql-5.7.24-winx64\lib\libmysql.lib#生成你所需要的dll存放目录
DESTDIR=F:\MYSQL\mysql-5.7.24-winx64\lib\aa
4. 生成后QMySQL的DLL文件存放目录
4.1 和选择的生成连接有关,还有就是MySQL如果是64位这里就要选64位,MySQL是32位这里就要选32位。
4.2 存放DLL目录也是需要放在对于的目录下,例如:F:\Qt\Qt5.14.1\5.14.1\winrt_x64_msvc2017\plugins\sqldrivers
4.3 生成的QMySQL驱动,qsqlmysql.dll和qsqlmysqld.dll
4.4 最后连接程序试一下,可以看到驱动已经出现QMySQL,也连接成功了
5. 过程中可能遇到的问题
5.1 打开mysql.h文件失败,这个主要是因为第3步修改参数mysql.pro配置的原因
5.2 出现:LNK1181: 无法打开输入文件“F:\MYSQL\mysql-5.7.24-winx64\lib.obj”
5.2.1 关闭QT中其他项目保证只有一个mysql依赖生成项目
5.2.2 清除项目,进行重新构建,实在不行先清除项目-》关闭项目-》打开重新构建
5.3 不同版本的dll错误使用可能会导致出错,所以希望大家尽量每次使用不同版本的QT尽量重新生成一次
5.4 Library 'mysql' is not defined 找不到mysql,参考第3步注释掉 #QMAKE_USE += mysql
最后,感谢那些做正确教程和深入研究解决问题的老哥
借鉴参考自:https://www.cnblogs.com/dz-study/p/12382837.html