目录
简述
在现代应用程序开发中,数据库的使用是不可或缺的一部分。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