QT6连接MYSQL数据库
本人使用的QT版本是QT6.5.3,使用的数据库版本是8.0.37,项目构建采用的是qmake。因此,此教程是针对于QT6。
本人使用的QT版本是QT6.5.3,使用的数据库版本是8.0.37,项目构建采用的是qmake。因此,此教程是针对于QT6。
准备工作
- 下载并安装QT
- 下载并安装MYSQL
QT6连接Mysql数据库
一、下载驱动
在QT6中,没有关于连接mysql数据库的驱动,是需要自己下载的,注意:下载的驱动版本要和自己的QT版本一致,本人采用的是QT6.5.3,因此下载的驱动版本是6.5.3,如图所示:
下载链接:Releases · thecodemonkey86/qt_mysql_driver · GitHub
下载后进行解压,解压时最好不要有中文路径,因为MYSQL驱动是基于全英字符编写的,如果软件没有正确处理Unicode字符串,可能会导致路径解析错误以及兼容性等问题。
二、放置驱动文件
- 将下载的压缩包解压后,将libcrypto-1_1-x64.dll,libmysql.dll,libssl-1_1-x64.dll这3个文件复制到D:\Qt\6.5.3\mingw_64\bin文件夹中(也就是QT安装目录中的mingw_64\bin文件夹下)
- 再将解压缩文件中的sqldrivers的两个mysql驱动文件,即复制到D:\Qt\6.5.3\mingw_64\plugins\sqldrivers文件夹中
三、检测数据库驱动
1.针对用qmake编译的项目,在检测数据库之前,要在项目工程文件,即.pro文件中添加
QT += sql
CONFIG += mysql
2.检测数据库驱动,可以将以下代码加入到main.cpp文件中
//输出可用数据库
qDebug()<<"available drivers:";
QStringList drivers = QSqlDatabase::drivers();
foreach(QString driver, drivers)
qDebug()<<driver;
3.得到输出:
如果输出中含有MySQL,那么恭喜你说明你的qt有MySQL驱动了,可以进行下一步。
4.连接数据库:在连接之前,一定要保证创建过数据库 ,再在main.cpp/其他.cpp的工程文件中添加以下代码进行连接:
#include<QSqlDatabase>
#include<QDebug>
void MainWindow::on_pushButton_clicked()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1"); //连接本地主机
db.setPort(3306);
db.setDatabaseName("db_name"); //已经提前创建的Mysql数据库名称
db.setUserName("root");
db.setPassword("123456"); //安装 Mysql 设置的密码
bool ok = db.open();
if (ok){
qDebug() << "link success";
}
else {
qDebug() << "link failed";
}
}
如果没有提前创建数据库,可以根据以下语句进行创建后,在进行连接:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
//设置数据库名字
db.setDatabaseName("login.db");
经测试输出link success。
如果经以上操作仍旧不能连接,可以将数据库重装,有可能会解决问题;
也可以尝试
在D:\QT\6.5.3\Src\qtbase\src\plugins\sqldrivers文件夹下的.cmake.conf文件中,添加
set(QT_REPO_MODULE_VERSION "6.5.3")
SET(FEATURE_sql_mysql ON)
SET(MySQL_INCLUDE_DIR "C:\Program Files\MySQL\MySQL Server 8.0\include")
SET(MySQL_LIBRARY "C:\Program Files\MySQL\MySQL Server 8.0\lib\libmysql.lib")
也可以尝试
在D:\QT\6.5.3\Src\qtbase\src\plugins\sqldrivers文件夹下的CMakelists.txt 文件中
- 找到
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
替换为find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Sql)
- 在
target_link_libraries(filename PRIVATE Qt$ {QT_VERSION_MAJOR}::Widgets)
后面添加一行target_link_libraries(filename PRIVATE Qt${QT_VERSION_MAJOR}::Sql)
里面的 filename 就是文件名,要一致
更多推荐
所有评论(0)