作者使用的是QT6.7.2搭配MySQL9.0, 但本教程应该是通用的; 需要注意的是QT以及MySQL的位数一定要确保一致, 都为32位或者都为64位
源码下载
首先确保正确安装了QT以及MySQL数据库, 并且你能够找到二者的安装目录
我们知道QT目前没有提供MySQL的驱动, 所以需要我们手动编译驱动, 并且将编译好的驱动添加到QT编译器中才能正常连接到MySQL数据库
而编译驱动需要用到QT源码, 所以我们首先需要下载源码, 如果你已经下载好了, 可以直接跳过这一步骤
点击打开QT Maintenance Tool
选择添加或移除组件
选中Sources
, 等待下载并安装完成
文件准备
安装好源码后, 从MySQL安装目录
C:\Program Files\MySQL\MySQL Server 9.0\lib
复制libmysql.dll
和libmysql.lib
到地址
C:\Qt\6.7.2\mingw_64\bin
从MySQL安装目录
C:\Program Files\MySQL\MySQL Server 9.0\bin
复制libcrypto-3-x64.dll
和libssl-3-x64.dll
到地址
C:\Qt\6.7.2\mingw_64\bin
注意将地址改为你的地址, 都添加完成后如下
驱动编译
接下来将MySQL中include
和lib
两个文件夹拷贝到另一个临时的文件夹中, 用于接下来的编译
临时文件夹地址
C:\Users\chenphxx\Documents\qt-mysql
然后打开QT Source源码中的数据库驱动地址
C:\Qt\6.7.2\Src\qtbase\src\plugins\sqldrivers
使用记事本打开配置文件.cmake.conf
将刚刚新建的临时文件夹中两个文件夹的地址添加到配置文件中, 添加的文件为include
和lib/libmysql.lib
, 这里需要替换为你的地址
SET(FEATURE_sql_mysql ON)
SET(MySQL_INCLUDE_DIR "C:/Users/chenphxx/Documents/qt-mysql/include")
SET(MySQL_LIBRARY "C:/Users/chenphxx/Documents/qt-mysql/lib/libmysql.lib")
修改完成后, 使用QT打开项目, 选择CMakeLists.txt
打开
C:\Qt\6.7.2\Src\qtbase\src\plugins\sqldrivers
随后点击锤子图标编译release
版本
编译完成后, 将得到的数据库驱动添加到QT编译器的路径下, 打开build文件夹, 选择plugins->sqldrivers
C:\Qt\6.7.2\Src\qtbase\src\plugins\sqldrivers\build\Desktop_Qt_6_7_2_MinGW_64_bit-Release\plugins\sqldrivers
将下图所示的两个文件qsqlmysql.dll
和qsqlmysql.debug
复制到QT编译器的数据库驱动文件夹下
目标地址
C:\Qt\6.7.2\mingw_64\plugins\sqldrivers
添加完成后, 目录应该是像下面这样
连接测试
在项目.pro
配置中添加
QT += sql
使用下面这段程序来测试是否能够正常连接到数据库
#include <QMainWindow>
#include <QSqlDatabase>
#include <QSqlError>
#include <QDebug>
#include "ui_MainWindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
qDebug() << QSqlDatabase::drivers(); // 控制台输出支持的数据库驱动
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); // 创建数据库对象
// 数据库参数
db.setHostName("127.0.0.1");
db.setPort(3306); // 替换为你的端口
db.setDatabaseName("database"); // 替换为你的数据库
db.setUserName("root"); // 替换为你的用户名
db.setPassword("123456"); // 替换为你的数据库密码
// 打开数据库
if (db.open())
qDebug() << "数据库连接成功";
else
qDebug() << "数据库连接失败";
}
MainWindow::~MainWindow()
{
delete ui;
}
在应用程序输出窗口, 结果应该如下