qt6连接mysql

qt6(mingw64)连接mysql的过程

防止自己忘记,进行记录

之前版本的解决方案
【经验分享】Qt连接Mysql_哔哩哔哩_bilibili

解决过程

image-20240425172502370
Qt要先连接到qt的数据库插件
连接mysql的动态库,最后连接mysql
qt的数据库插件需要编译,不同版本对应的插件不同。

遇到问题

mysql的动态库在mysql中,需要复制到qt的bin路径下面

不同的地方,因为版本原因,QT6的这个下面,没有.pro(使用的是qmake)

因为使用的是cmake来编译的

E:\program\Qt\6.5.2\Src\qtbase\src\plugins\sqldrivers\mysql

我们需要查看一下readme

您需要安装MySQL开发头文件和库
在编译此插件之前。
有关编译Qt-SQL的更多信息,请参阅Qt-SQL文档
驱动程序插件(sqldriver.html)。

参考文档

SQL Database Drivers | Qt SQL 6.7.1

我们跳转到这个界面

Qt SQL 模块使用驱动插件与不同的数据库 API 通信。由于 Qt 的 SQL 模块 API 与数据库无关,所有与数据库相关的代码都包含在这些驱动程序中。Qt 提供了多个驱动程序,还可以添加其他驱动程序。我们还提供了驱动程序源代码,可作为编写自己的驱动程序的范本。

根据表格,我们需要的驱动是QMYSQL

用于 MySQL 或 MariaDB 5.6 及更高版本的 QMYSQL

MariaDB是MySQL的一个分叉,旨在保持GNU通用公共许可证下的自由和开源软件。MariaDB旨在保持与MySQL的高度兼容性,确保可直接替换,并与MySQL API和命令完全匹配。因此,MySQL 和 MariaDB 的插件合并为一个 Qt 插件。

MySQL 在 SQL 层支持存储过程,但没有控制 IN、OUT 和 INOUT 参数的 API。因此,必须使用 SQL 命令而不是 QSqlQuery::bindValue() 来设置和读取参数。

create procedure qtestproc (OUT param1 INT, OUT param2 INT)
BEGIN
    set param1 = 42;
    set param2 = 43;
END

嵌入Mysql服务

MySQL 嵌入式服务器可直接替代普通客户端库。有了嵌入式 MySQL 服务器,使用 MySQL 功能就不需要 MySQL 服务器了。

要使用嵌入式 MySQL 服务器,只需将 Qt 插件链接到 libmysqld 而不是 libmysqlclient。这可以通过在 configure 命令行中添加 -DMySQL_LIBRARY=<path/to/mysqld/>libmysqld.<so|lib|dylib> 来实现。

有关 MySQL 嵌入式服务器的更多信息,请参阅 MySQL 文档 "libmysqld,嵌入式 MySQL 服务器库 "一章。

How to Build the QMYSQL Plugin on Windows

你需要获取 MySQL 安装文件(如 MySQL 网页安装程序或 MariaDB C Connector)。运行安装程序,选择自定义安装并安装与 Qt 安装(x86 或 x64)相匹配的 MySQL C Connector。安装完成后检查所需文件是否存在:

  • <MySQL dir>/lib/libmysql.lib
  • <MySQL dir>/lib/libmysql.dll
  • <MySQL dir>/include/mysql.h

and for MariaDB

  • <MariaDB dir>/lib/libmariadb.lib
  • <MariaDB dir>/lib/libmariadb.dll
  • <MariaDB dir>/include/mysql.h

注:自 MySQL 8.0.19 起,C 连接器不再作为独立的可安装组件提供。相反,你可以通过安装完整的 MySQL 服务器(仅限 x64)或 MariaDB C 连接器获得 mysql.h 和 libmysql.*。

按如下方式构建插件(此处假定 <MySQL 目录> 为 C:\mysql-8.0.22-winx64):

mkdir build-sqldrivers
cd build-sqldrivers
qt-cmake -G Ninja <qt_installation_path>\Src\qtbase\src\plugins\sqldrivers 
-DCMAKE_INSTALL_PREFIX=<qt_installation_path>\<platform> 
-DMySQL_INCLUDE_DIR="C:\mysql-8.0.22-winx64\include" 
-DMySQL_LIBRARY="C:\mysql-8.0.22-winx64\lib\libmysql.lib"
cmake --build .
cmake --install .

分发应用程序时,请记住在安装包中包含 libmysql.dll / libmariadb.dll。libmysql.dll 还需要 MSVC 运行库,这些运行库可通过 vcredist.exe 安装。

在使用qt-make之前,我们要确保Qt的工具链在我们的系统环境变量中,我们可以访问到。

E:\program\Qt\6.5.2\mingw_64\bin添加到环境变量当中

cmake构建

在选择构建系统时,我们也是有依赖性的,即对于使用的 mingw64的系统,我们的G后的变量"MinGW Makefiles"而不是Ninja,在设定好下面的变量和路径之后,我们就在当前文件夹开始mysql的配置。

qt-cmake -G "MinGW Makefiles" E:\program\Qt\6.5.2\Src\qtbase\src\plugins\sqldrivers -DCMAKE_INSTALL_PREFIX=E:\program\Qt\6.5.2\mingw_64 
-DMySQL_INCLUDE_DIR="C:\Program Files\MySQL\MySQL Server 8.0\include" 
-DMySQL_LIBRARY="C:\Program Files\MySQL\MySQL Server 8.0\lib\libmysql.lib" && cmake --build . && cmake --install .

image-20240425214125348

image-20240425212530920

运行结束后的效果

image-20240425212553979

即获得了第一 个过程中的对应的文件。我们把文件放在指定位置进行测试。

即拷贝过程

把qsqlmysql.dll和qsqlmysql.debug放到我使用的mingw的对应的sqldrivers路径下面

E:\program\Qt\6.5.2\mingw_64\plugins\sqldrivers

我们发现已经存在了

image-20240425213359371
把mysql对应的libmysql.dll复制到对应版本的bin目录下面E:\program\Qt\6.5.2\mingw_64\bin

连接数据库的代码

//可以是指定的类,此处使用在学生管理系统中使用
void StudentDialog::CreatDatabaseFunc()
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

    // 设置数据库连接参数
    db.setHostName("localhost"); // 数据库服务器主机名或IP地址
    db.setDatabaseName("Stuinfo"); // 数据库名称,记得用命令创建数据库
    db.setUserName("root"); // MySQL用户名
    db.setPassword("123456"); // MySQL密码

    // 尝试连接到数据库
    if (db.open()) {
        qDebug() << "Connected to MySQL database!";
        // 在这里可以执行数据库操作
    } else {
        qDebug() << "Failed to connect to MySQL database!";
        qDebug() << "Error: " << db.lastError().text();
    }

连接成功

21:35:41: Starting E:\program\coding\project\qt\build-studentMis-Desktop_Qt_6_5_2_MinGW_64_bit-Debug\debug\studentMis.exe…
Connected to MySQL database!

  • 11
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值