使用 Qt6.8 连接MySQL数据库

发布于:2025-02-27 ⋅ 阅读:(16) ⋅ 点赞:(0)

目录

简述

1. 提取MySQL库文件

2. 下载 Qt6.8.2 源码

3. 修改Qt6.8.2源码配置

4. 编译MYSQL驱动

5. 在项目中配置MYSQL

5.1 修改工程文件

5.2 尝试解决

6. QSqlDatabase的替换方案

6.1 MySQL Connector/C++

6.2 完整代码


简述

在现代应用程序开发中,数据库的使用是不可或缺的一部分。Qt6 作为一款强大的跨平台应用开发框架,提供了丰富的数据库支持,使得开发者能够轻松地将应用程序与各种数据库进行连接和交互。本文将详细介绍如何使用 Qt6连接MySQL数据库(不一定能成功) 和 使用 MySQL Connector C++ 备选方案。

环境准备

在开始之前,请确保你已经安装了以下软件:

  • Qt6:确保你已经下载并安装了 Qt6 开发环境,包括 Qt Creator IDE。
  • MySQL 数据库:根据操作系统的类型下载并安装 MySQL 。

折腾也不一定成功,不是非要将功能焊在一个库上。

不想折腾直接到第6步。 


1. 提取MySQL库文件

从安装目录中找到相关库文件,安装路径一般为:C:\Program Files\MySQL\MySQL Server 8.0\lib

 将图中2个库(libmysql.dll、libmysql.lib)放入 D:\Qt6\6.8.2\mingw_64\bin中

将安装目录的include、lib目录复制,备份到以下目录:


2. 下载 Qt6.8.2 源码

3. 修改Qt6.8.2源码配置

进入目录:D:\Qt6\6.8.2\Src\qtbase\src\plugins\sqldrivers,编辑.cmake.conf文件:

添加三行内容:

set(FEATURE_sql_mysql ON)
set(MySQL_INCLUDE_DIR "D:/code/mysql-winx64/include")
set(MySQL_LIBRARY "D:/code/mysql-winx64/lib/libmysql.lib")

4. 编译MYSQL驱动

在Qt Creator中选择菜单 文件 > 打开文件或项目,选择D:\Qt6\6.8.2\Src\qtbase\src\plugins\sqldrivers下的CMakeLists.txt

配置项目:

然后选择Release:

直接编译,生成目录在:D:\Qt6\6.8.2\Src\qtbase\src\plugins\sqldrivers\build\Desktop_Qt_6_8_2_MinGW_64_bit-Release\plugins\sqldrivers

已生成库文件qsqlmysql.dll

然后将qsqlmysql.dll文件复制到D:\Qt6\6.8.2\mingw_64\plugins\sqldrivers下:

放到这里,就可以被QSqlDatabase对象识别了。

qt.sql.qsqldatabase: QSqlDatabase: available drivers: QSQLITE QMIMER QMARIADB QMYSQL QODBC QPSQL

5. 在项目中配置MYSQL

5.1 修改工程文件

CMake构建:

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core Sql)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Sql)
target_link_libraries(ds_test_mysql
    Qt${QT_VERSION_MAJOR}::Core
    Qt${QT_VERSION_MAJOR}::Sql
)

但现在还会报错:

 qt.sql.qsqldatabase: QSqlDatabase: QMYSQL driver not loaded

5.2 尝试解决

将mysql库路径加入到环境变量中:

重新启动Qt Creator,编译运行demo还是报错:

qt.sql.qsqldatabase: QSqlDatabase: QMYSQL driver not loaded
qt.sql.qsqldatabase: QSqlDatabase: available drivers: QSQLITE QMIMER QMARIADB QMYSQL QODBC QPSQL
Database error: "Driver not loaded Driver not loaded"

不折腾了,浪费时间。


6. QSqlDatabase的替换方案

6.1 MySQL Connector/C++

MySQL Connector/C++ 是 MySQL 官方提供的用于 C++ 编程语言的驱动程序,它允许开发者通过 C++ 程序连接和操作 MySQL 数据库。

下载:https://dev.mysql.com/downloads/connector/cpp/

用VS创建c++控制台项目,然后给项目添加依赖路径:

C:\Program Files\MySQL\MySQL Connector C++ 9.2\include

然后添加库的路径:(C:\Program Files\MySQL\MySQL Connector C++ 9.2\lib64\vs14)

 添加附加依赖项:

mysqlcppconnx.lib

对应目录下:

6.2 完整代码

提前建一个数据库:

CREATE DATABASE IF NOT EXISTS database1;
USE database1;

创建表:

CREATE TABLE demo (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    age INT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

插入测试数据: 

INSERT INTO demo (name, age) VALUES ('Alice', 30), ('Bob', 25);

 代码:

#include <mysqlx/xdevapi.h>  // 使用 X DevAPI
#include <iostream>

int main() 
{
	try {
		mysqlx::Session session("localhost", 33060, "root", "123456");
		mysqlx::Schema schema = session.getSchema("database1");
		mysqlx::Table table = schema.getTable("demo");

		// 查询操作
		mysqlx::RowResult result = table.select("id", "name", "age").execute();
		while (mysqlx::Row row = result.fetchOne()) {
			std::cout << "ID: " << row[0] << ", Name: " << row[1] << ", Age: " << row[2] << std::endl;
		}
	}
	catch (const mysqlx::Error& e) {
		std::cerr << "Error: " << e.what() << std::endl;
	}
	return 0;
}

运行结果:

注意端口号是33060,不是3306,否则会报错:CDK Error: unexpected message