QT5.15.1连接MySQL8.0.28(32位/64位)最佳实践

xingyun86 2022-1-22 819

QT5.15.1连接MySQL8.0.28(32位/64位)最佳实践(文章底部有编译好的包和编译依赖包)

准备工作下载:

Qt5.15.1源代码下载地址:

https://download.qt.io/archive/qt/5.15/5.15.1/submodules/qtbase-everywhere-src-5.15.1.tar.xz

MySQL8.0.28(只有64位版本)下载地址:MySQL :: Download MySQL Community Server

(mysql-connector-c-6.1.11-win32.zip)下载地址:MySQL :: Download MySQL Connector/C (Archived Versions)

一.QT编写64位应用程序连接MySQL8.0.28

1.安装MySQL8.0.28(只有64位版本),可以去网盘下载初始化工具。安装启动即可。

2.解压qtbase-everywhere-src-5.15.1.tar.xz。

3.打开工程qtmysqlapp\qtbase-everywhere-src-5.15.1\src\plugins\sqldrivers\mysql\mysql.pro。

4.修改PRO选项:

win32 {#新增该项库引入
    contains(QT_ARCH, i386) {
        message("x86 build")
        ## Windows x86 (32bit) specific build here
        LIBS += -l"C:/Utils/my_sql/mysql-5.7.25-win32/lib/libmysql"
    } else {
        ## Windows common build here
        !contains(QMAKE_HOST.arch, x86_64) {
            message("x86 build")
            ## Windows x86 (32bit) specific build here
            LIBS += -l"C:/Utils/my_sql/mysql-5.7.25-win32/lib/libmysql"
        } else {
            message("x86_64 build")
            ## Windows x64 (64bit) specific build here
            LIBS += -l"C:/Utils/my_sql/mysql-5.7.25-winx64/lib/libmysql"
        }
    }
}
#QMAKE_USE += mysql #注释此行

5.修改plugins\sqldrivers\qsqldriverbase.pri。

#include($$shadowed($$PWD)/qtsqldrivers-config.pri)
include(./configure.pri)

6.拷贝MySQL8.0.28安装目录下的include和lib目录所有文件拷贝到C:/Utils/my_sql/mysql-5.7.25-winx64目录下。

7.编译生成(目录在编译磁盘分区的根目录下的plugins\sqldrivers\目录下)。

-rwxr-xr-x 1 aaa 197121   50688 Jan 22 19:56 qsqlmysql.dll*
-rw-r--r-- 1 aaa 197121    2024 Jan 22 19:55 qsqlmysql.lib
-rwxr-xr-x 1 aaa 197121  139264 Jan 22 19:56 qsqlmysqld.dll*
-rw-r--r-- 1 aaa 197121    2040 Jan 22 19:55 qsqlmysqld.lib

8.拷贝这四个文件到QT安装目录Qt\5.15.1\msvc2019_64\plugins\sqldrivers目录下即可。

9.新建QtMySQLDemo项目:

.pro修改:

QT       += core gui sql

mainwindow.cpp修改:

#include <qsqldatabase.h>
#include <qsqlerror.h>
#include <qdebug.h>
#include <qmessagebox.h>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setConnectOptions();
    db.setHostName("localhost");
    db.setPort(3306);
    db.setDatabaseName("testdb");
    db.setUserName("test");
    db.setPassword("123456");
    if (!db.open())
    {
        qDebug()<<"open failed!" << db.lastError().text() << "\n";
        printf("open failed!\n");
        QMessageBox::warning(this,
                           QString::fromLocal8Bit("Message"),
                           db.lastError().text(),
                           QMessageBox::Ok,
                           QMessageBox::Ok);
    }
    else
    {
        qDebug()<<"open success!";
        printf("open success!\n");
        QMessageBox::information(this,
                           QString::fromLocal8Bit("Message"),
                           QString::fromLocal8Bit("open success"),
                           QMessageBox::Ok,
                           QMessageBox::Ok);
    }
}

10.编译后拷贝C:\Utils\my_sql\mysql-5.7.25-winx64\lib目录下所有dll到exe运行目录。

11.运行,测试Ok。

二.QT编写32位应用程序连接MySQL8.0.28(不同于64位,32位需要做更多配置)

1.安装MySQL8.0.28(只有64位版本),可以去网盘下载初始化工具。(此配置跨平台可支持使用)。

安装配置如下:

my.cnf修改:(32位目前使用6.11版本链接库,无ssl支持,故跳过SSL安全隧道)

[mysqld]
skip_ssl

mysql 8.0 默认使用 caching_sha2_password 身份验证机制 —— 从原来的 mysql_native_password 更改为 caching_sha2_password。 

从 5.7 升级 8.0 版本的不会改变现有用户的身份验证方法,但新用户会默认使用新的 caching_sha2_password 。

//本地支持
ALTER USER 'test'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
//远程支持
ALTER USER 'test'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

2.解压qtbase-everywhere-src-5.15.1.tar.xz。

3.打开工程qtmysqlapp\qtbase-everywhere-src-5.15.1\src\plugins\sqldrivers\mysql\mysql.pro。

4.修改PRO选项:

win32 {#新增该项库引入
    contains(QT_ARCH, i386) {
        message("x86 build")
        ## Windows x86 (32bit) specific build here
        LIBS += -l"C:/Utils/my_sql/mysql-5.7.25-win32/lib/libmysql"
    } else {
        ## Windows common build here
        !contains(QMAKE_HOST.arch, x86_64) {
            message("x86 build")
            ## Windows x86 (32bit) specific build here
            LIBS += -l"C:/Utils/my_sql/mysql-5.7.25-win32/lib/libmysql"
        } else {
            message("x86_64 build")
            ## Windows x64 (64bit) specific build here
            LIBS += -l"C:/Utils/my_sql/mysql-5.7.25-winx64/lib/libmysql"
        }
    }
}
#QMAKE_USE += mysql #注释此行

5.修改plugins\sqldrivers\qsqldriverbase.pri。

#include($$shadowed($$PWD)/qtsqldrivers-config.pri)
include(./configure.pri)

6.解压mysql-connector-c-6.1.11-win32.zip并拷贝mysql-connector-c-6.1.11-win32目录下的include和lib目录所有文件拷贝到C:/Utils/my_sql/mysql-5.7.25-win32目录下。

7.编译生成(目录在编译磁盘分区的根目录下的plugins\sqldrivers\目录下)

-rwxr-xr-x 1 aaa 197121   50688 Jan 22 19:56 qsqlmysql.dll*
-rw-r--r-- 1 aaa 197121    2024 Jan 22 19:55 qsqlmysql.lib
-rwxr-xr-x 1 aaa 197121  139264 Jan 22 19:56 qsqlmysqld.dll*
-rw-r--r-- 1 aaa 197121    2040 Jan 22 19:55 qsqlmysqld.lib

8.拷贝这四个文件到QT安装目录Qt\5.15.1\msvc2019\plugins\sqldrivers目录下即可。

9.新建QtMySQLDemo项目:

.pro修改:

QT       += core gui sql

mainwindow.cpp修改:

#include <qsqldatabase.h>
#include <qsqlerror.h>
#include <qdebug.h>
#include <qmessagebox.h>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setConnectOptions();
    db.setHostName("localhost");
    db.setPort(3306);
    db.setDatabaseName("testdb");
    db.setUserName("test");
    db.setPassword("123456");
    if (!db.open())
    {
        qDebug()<<"open failed!" << db.lastError().text() << "\n";
        printf("open failed!\n");
        QMessageBox::warning(this,
                           QString::fromLocal8Bit("Message"),
                           db.lastError().text(),
                           QMessageBox::Ok,
                           QMessageBox::Ok);
    }
    else
    {
        qDebug()<<"open success!";
        printf("open success!\n");
        QMessageBox::information(this,
                           QString::fromLocal8Bit("Message"),
                           QString::fromLocal8Bit("open success"),
                           QMessageBox::Ok,
                           QMessageBox::Ok);
    }
}

10.编译后拷贝C:\Utils\my_sql\mysql-5.7.25-win32\lib目录下所有dll到exe运行目录。

11.运行,测试Ok。

================================================

备用下载地址,依赖及编译好的库网盘下载地址:

链接: https://pan.baidu.com/s/12Kpe0MaZUA8d8kmr0VjTRA 提取码:

本帖有隐藏内容,请您回复后查看。

本帖有隐藏内容,请您回复后查看。

×
打赏作者
最新回复 (0)
只看楼主
全部楼主
返回