QT编译MySQL驱动教程(Windows/Linux)

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();
}
相关推荐
萧咕2 小时前
理解MySQL数据可视化的核心概念
数据库·mysql·信息可视化
数智工坊2 小时前
【操作系统-处理器调度】
java·linux·服务器·windows·ubuntu
静谧空间2 小时前
Linux自动备份Mysql数据
linux·运维·mysql
霖霖总总2 小时前
[小技巧40]MySQL中的MVCC:多版本并发控制的深度解析
数据库·mysql
德彪稳坐倒骑驴2 小时前
DataX将数据在MySQL和HDFS之间互相迁移
数据库·mysql·hdfs
IT教程资源2 小时前
N-159基于springboot,vue,AI协同过滤算法旅游推荐系统
mysql·vue·前后端分离·springboot旅游推荐·协同过滤算法旅游推荐·ai旅游推荐
techdashen2 小时前
借助gh-ost,对MySQL大表进行表结构的变更
数据库·mysql
amazing-yuan2 小时前
Windows系统查看是否已安装Mysql,查找Mysql的安装地址,忘记root账号的密码时重置密码操作指引
数据库·windows·mysql
WangYaolove13142 小时前
基于人脸表情的分类算法的设计(源码+文档)
python·mysql·django·毕业设计·源码