QT连接MySql数据库报错
缺少Mysql驱动
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7
MySql database open fail --- QSqlError("", "Driver not loaded", "Driver not loaded")
原理:QT要连接Mysql,要通过QT的数据库连接插件连接到Mysql的动态库,再连接到MySql
不同版本的QT需要的插件不完全相同
1.修改mysql.pro代码
版本太高,可能会没有这个文件,我的是QT5.14.2
找到这个文件 D:\Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers\mysql,
用QT打开后,修改后点击编译
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
win32:LIBS += -LD:/MySQL/MySQLServer5.7/lib -llibmysql
INCLUDEPATH += D:/MySQL/MySQLServer5.7/include
DEPENDPATH += D:/MySQL/MySQLServer5.7/include
include(../qsqldriverbase.pri)
2.修改后,点击编译,没有问题直接跳到第3步即可
问题1:error: mysql.h: No such file or directory #include <mysql.h>
这是因为你的文件路径有空格 这几个代码路径不能有空格,直接修改文件路径的话,你的mysql服务会出现问题,无法打开什么的
我试了很久,还是重开吧,我重新又装了一次mysql,注意QT的版本跟MySql的版本要一致,都是64位或者都是32位
win32:LIBS += -LD:/MySQL/MySQLServer5.7/lib -llibmysql
INCLUDEPATH += D:/MySQL/MySQLServer5.7/include
DEPENDPATH += D:/MySQL/MySQLServer5.7/include
问题2:Cannot read D:/qtsqldrivers-config.pri:No such file or directory
打开qsqldriverbase.pri文件,将第四行注释掉,即 #include($ s h a d o w e d ( shadowed( shadowed( $PWD)/qtsqldrivers-config.pri),
添加include(./configure.pri)
解决问题后:编译mysql.pro文件
3、编译成功后
- 可以看到 D盘(你自己QT在哪个盘就在哪里)下有个pluigins文件生成,
复制这两个文件到D:\Qt5.14.2\5.14.2\mingw73_64\plugins\sqldrivers
/
- 再把D:\MySQL\MySQLServer5.7\lib下面的这个文件复制到D:\Qt5.14.2\5.14.2\mingw73_64\bin下
/
4、测试连接
连接数据库代码:
//创建数据库类型
db = QSqlDatabase::addDatabase("QMYSQL");
db.setDatabaseName("");
db.setHostName("127.0.0.1");
db.setPort(3306);
db.setUserName("");
db.setPassword("");
if(!db.open())
{
qDebug() <<"MySql database open fail --- " << db.lastError();
}
else
{
qDebug() <<"MySql database open successfully";
}
成功