[id-00011] Qt连接MySQL数据库[QMYSQL driver not loaded]
0. 前言(必看,花点时间!)
- 本人Qt是5.15.2版本,编译器是Qt Creator 11.0.2。当然其他版本和编译器也按照下面相同操作也是可以的,重点是编译出来MySQL的库文件罢了,因为网上不一定好找到相同版本且现有的MySQL驱动。
- 如果第一次看见这篇文章,那么下面的方法会非常容易让人上手,你只要有QT环境和MySQL就行,下面的操作按步骤走就行。
- 如果没有安装MySQL,先 -->点我安装MySQL
1. 错误提示
想必大家遇到的情况与下面类似,重点还是没有Qt可以直接使用的MySQL库文件。因为Qt默认提不供现成可用的MySQL驱动,这里需要手动去编译一下,后面就可以复制粘贴随便用了(但是要注意编译器类型以及其版本要相同)。
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7
MySQL连接错误。原因: "Driver not loaded Driver not loaded" //这段是自己打印的,即db.lastError().text()
2. 编译MySQL源码 ★
2.1 打开mysql.pro并配置编译器以及其版本
- 打开mysql.pro文件
文件路径:Qt安装路径\版本号\Src\qtbase\src\plugins\sqldrivers\mysql
比如我的文件路径是:D:\software\Qt\5.15.2\Src\qtbase\src\plugins\sqldrivers\mysql
- 配置编译器以及其版本
选msvc还是mingw编译器,以及选32位还是64位,自己根据需求来编译就行,不同版本编译出来不互通的哈。如果不知道怎么选且偏向个人开发的话用mingw64就行。
2.2 配置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的头文件和库文件(去自己MySQL安装的位置找)
INCLUDEPATH += "D:/software/mysql-8.0.30-winx64/include" #包含一下MySQL的头文件
LIBS += "D:/software/mysql-8.0.30-winx64/lib/libmysql.lib" #包含一下MySQL的libmysql.lib库文件
#设置库文件存放目录
#可以自行指定,也可以直接给个绝对路径
DESTDIR = "../mysql/dll"
原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)
2.3 生成qsqlmysql库文件
这里直接点击运行即可生成库文件。
=>报错You need to set an executable in the custom run configuration.
,不用管,此时就已经生成我们需要的库文件了。
注意: 如果你没有指定绝对路径,这里需要知道源码编译默认输出路径。根据图片红色框中的构建目录去找就行。
到这里qsqlmysql的库文件都编译好了!!!
3. 拷贝相关文件 ★★★
这里需要将MySQL库文件和编译好的qsqlmysql库文件复制到它发挥价值的地方,注意编译器的版本号,不要复制错了!也不要搞错路径了!但凡少复制了还是会报文章开头的错误。看下面步骤。
- MySQL的库文件(去自己MySQL安装的位置找)
- 编译好的qsqlmysql库文件
4. 代码连接MySQL简单测试
// 这只是一个简单的连接实例哈
void DataBase::connect()
{
//addDatabase参数1:数据库驱动名称。
//addDatabase参数2:数据库连接名称。操作单个数据库无需指定,默认即可。
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1"); //数据库部署位置的地址(本机默认127.0.0.1或localhost)
db.setDatabaseName("teachManage"); //需要连接的数据库名称
db.setUserName("root"); //数据库登陆用户名
db.setPassword("root"); //数据库登陆用户密码
if(db.open())
qDebug()<<"MySQL连接成功...";
else
qDebug()<<"MySQL连接错误。原因:"<<db.lastError().text();
}