本人使用的QT版本是QT6.5.3,使用的数据库版本是8.0.37,项目构建采用的是qmake。因此,此教程是针对于QT6。

准备工作

  1. 下载并安装QT
  2. 下载并安装MYSQL

 QT6连接Mysql数据库

一、下载驱动 

在QT6中,没有关于连接mysql数据库的驱动,是需要自己下载的,注意:下载的驱动版本要和自己的QT版本一致,本人采用的是QT6.5.3,因此下载的驱动版本是6.5.3,如图所示:

 下载链接:Releases · thecodemonkey86/qt_mysql_driver · GitHub

下载后进行解压,解压时最好不要有中文路径,因为MYSQL驱动是基于全英字符编写的,如果软件没有正确处理Unicode字符串,可能会导致路径解析错误以及兼容性等问题。

 二、放置驱动文件

  • 将下载的压缩包解压后,将libcrypto-1_1-x64.dlllibmysql.dlllibssl-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 就是文件名,要一致

本文参考:https://www.cnblogs.com/AndyYX/p/18144477 

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐