1. 基础环境
- QT 任意版本,需添加源码组件

- Windows平台,下载MySQL Server,需选择一致的版本,不要求安装,仅用到头文件和库文件

- Linux平台,可在线安装mysql开发工具包,包含有头文件和库文件
bash
sudo apt install libmysqlclient-dev
有些教程用的是MySQL Connector/C工具包中的动态库来构建的,但经测试发现无法解决ssl的问题,不推荐
2. 路径确认
参考并确定以下路径
Windows平台
QT的安装路径:D:\Dev\Qt5
MySQL头文件路径:D:\Dev\MySQL84\include
MySQL库文件路径:D:\Dev\MySQL84\lib
QT的MySQL驱动源码路径:D:\Dev\Qt5\5.14.2\Src\qtbase\src\plugins\sqldrivers\mysql
Linux平台QT的安装路径:/home/user/Qt5.14.2/
MySQL头文件路径:/usr/local/include/mysql/
MySQL库文件路径:/usr/lib/x86_64-linux-gnu/
QT的MySQL驱动源码路径:/home/user/Qt5.14.2/5.14.2/Src/qtbase/src/plugins/sqldrivers/mysql/
3. 修改项目配置
用QtCreator打开MySQL源码路径下的mysql.pro文件,选择对应的工具链

修改mysql.pro和qsqldriverbase.pri两个项目文件配置

bash
TARGET = qsqlmysql
HEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp
# 1、注释该行
# QMAKE_USE += mysql
OTHER_FILES += mysql.json
PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)
# 2、添加MySQL动态库路径
# Window平台
INCLUDEPATH +="D:\Dev\MySQL84\include"
LIBS += -L"D:\Dev\MySQL84\lib" -lmysql
#Linux平台
#INCLUDEPATH +="/usr/include/mysql/"
#LIBS += -L"/usr/lib/x86_64-linux-gnu/" -lmysqlclient
# 3、编译到指定路径
DESTDIR = $$PWD/libdirver
bash
QT = core core-private sql-private
# For QMAKE_USE in the parent projects.
# 1、注释该行
# include($$shadowed($$PWD)/qtsqldrivers-config.pri)
# 2、添加该行
include(./configure.pri)
PLUGIN_TYPE = sqldrivers
load(qt_plugin)
DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII
4. 构建生成库文件
执行构建,完成构建后,右键.pro文件打开mysql驱动源码同级目录,在libdirver下查看确认库文件
Windows平台
Linux平台
linux平台报错问题

原因是权限不足,只需要在控制台使用管理员权限启动qtcreator即可(生成的库文件权限属于root用户)
bash
sudo /home/user/Qt5.14.2/Tools/QtCreator/bin/qtcreator
5. 拷贝库文件
将libdirver/下编译生成的库文件拷贝至QT对应编译工具链的/plugins/sqldrivers文件夹下
Windows平台下:D:/Dev/Qt5/5.14.2/mingw73_64/plugins/sqldrivers/
Linux平台下:/home/user/Qt5.14.2/5.14.2/gcc_64/plugins/sqldrivers/
在Windows平台下,还需要将MySQL Server安装目录下的lib/libmysql.dll拷贝至QT对应编译工具链的\bin\下
而在Linux平台下,/usr/lib/x86_64-linux-gnu/包含在在系统环境路径中可被QT搜索到,所以不需要额外操作
Windows平台下:D:/Dev/Qt5/5.14.2/mingw73_64/bin/libmysql.dll
6. 测试
新建控制台项目(需选择相同的编译工具链),在.pro项目配置文件中添加sql项
bash
QT += sql
运行代码
cpp
#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlError>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 打印 Qt 支持的所有数据库驱动
qDebug() << QSqlDatabase::drivers();
// 测试连接 MySQL(替换为你的 MySQL 账号密码)
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("test"); // 替换为你的数据库名
db.setUserName("root"); // 替换为你的 MySQL 用户名
db.setPassword("123456"); // 替换为你的 MySQL 密码
db.setPort(3306);
if (db.open()) {
qDebug() << "MySQL connection success!";
db.close();
} else {
qDebug() << "MySQL connection failed:" << db.lastError().text();
}
return a.exec();
}


