Windows 基于Visual Studio 开发Qt 6 连接MySQL 8

前提条件:

1、Visual  Studio 2022 社区版(免费版)

2、Qt-6.5.1版本

3、MySQL 8 

Qt 6 配置MySQL 8 动态/静态连接库和MySQL 8 驱动。

  • libmysql.dll 和libmysql.lib是QT所需的动态和静态链接库;
  • qsqlmysql.dll 和qsqlmysql.dll.debug是Qt所需的mysql驱动; 

Qt 6 设置MySQL 8 驱动 

本文Qt 6 安装目录地址: D:\Qt\6.5.1\msvc2019_64\plugins\sqldrivers

第一步:将qsqlmysql.dll 和qsqlmysql.dll.debug 拷贝至Qt 6 安装目录下的插件/驱动目录中( D:\Qt\6.5.1\msvc2019_64\plugins\sqldrivers)

第二步:Qt 6 验证MySQL 8 驱动是否安装成功

首先使用Vistual Studio 2022 创建Qt 6 项目,项目名称为:QtWidgetsApplicationTwo

选择 Qt Widgets Application 项目,再点击下一步。

 

创建项目名称:QWidgetApplicationTwo,再点击下一步。

 

直接点击Next 按钮。

 

默认Qt 版本、系统、平台和Qt 模块,点击Next 按钮.

 

直接点击Finsh,完成项目创建。

运行QtWidgetApplicationTwo 项目的效果。

本章节知识重点: 

 首先在对应Qt项目qmark 中的*.pro文件中设置Qt += sql 如下:

Visual Studio 默认Qt 项目中的qmark 文件地址:E:\visual_workspace\QtWidgetsApplicationTwo\x64\Debug\qmake\temp\qtvars.proc

原文:

CONFIG += no_fixpath
QT += core gui widgets

原文添加sql:

CONFIG += no_fixpath
QT += core gui widgets sql

其次,修改QtWidgetsApplicationTwo.h 头文件对应的实现QtWidgetsApplicationTwo.cpp,在UI初始化函数添加如下代码片段:

    // 输出可用数据库
    qDebug() << "available drivers:";
    QStringList drivers = QSqlDatabase::drivers();
    foreach(QString driver, drivers)
    qDebug() << driver;

QtWidgetsApplicationTwo.cpp 源码

#include "QtWidgetsApplicationTwo.h"
#include "QtSql/QSqlDatabase"
#include "QtSql/QSqlQuery"
#include "QString"
#include "QMessageBox"
#include "QDebug"


QtWidgetsApplicationTwo::QtWidgetsApplicationTwo(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);

    // 输出可用数据库
    qDebug() << "available drivers:";
    QStringList drivers = QSqlDatabase::drivers();
    foreach(QString driver, drivers)
    qDebug() << driver;

}

QtWidgetsApplicationTwo::~QtWidgetsApplicationTwo()
{}

运行QtWidgetApplicationTwo 项目,在控制台找到Qt 项目支持的数据库驱动信息输出。

Qt 6 设置 MySQL 8  动态和静态链接库

将libmysql.dll 和libmysql.lib 拷贝至D:\Qt\6.5.1\msvc2019_64\bin目录下。

本章节知识重点: 

修改QtWidgetsApplicationTwo.h 头文件对应的实现QtWidgetsApplicationTwo.cpp,在UI初始化函数添加如下代码片段:

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");//首次需要添加数据库驱动(必须在main程序中),第二次只需QSqlDatabase::database("QMYSQL")(其他文件中,防止多次使用);
    db.setHostName("192.168.43.10");//设置ip
    db.setPort(3306);//端口号
    db.setDatabaseName("usc");//数据库名称
    db.setUserName("root");//用户名
    db.setPassword("123456");//密码
    QSqlQuery query = QSqlQuery(db);//db对象
    bool ok = db.open();//连接数据库
    if (db.open()) {
        QMessageBox::information(this, "infor", "success");//成功
        qDebug() << "success!!!";

    }
    else {
        QMessageBox::information(this, "infor", "open failed");
        qDebug() << "error open database because";//失败
    }

 运行QtWidgetApplicationTwo 项目,在控制台找到Qt 项目支持的数据库驱动信息输出。

 

Qt 6 项目配置MySQL 8 驱动 遇到的问题

问题一: error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: static class QList<class QString> __cdecl QSqlDatabase::drivers(void)" (__imp_?drivers@QSqlDatabase@@SA?AV?$QList@VQString@@@@XZ),函数 "public: __cdecl QtWidgetsApplicationTwo::QtWidgetsApplicationTwo(class QWidget *)" (??0QtWidgetsApplicationTwo@@QEAA@PEAVQWidget@@@Z) 中引用了该符号
1>E:\visual_workspace\QtWidgetsApplicationTwo\x64\Debug\QtWidgetsApplicationTwo.exe : fatal error LNK1120: 1 个无法解析的外部命令

产生此问题原因:Qt 项目没有添加Qt SQL 模块。

解决办法:

拓展->Qt VS Tool ->Qt Project Settings

上图,是VS 创建Qt 项目默认加载的Qt 模块。

 

上图,是为Qt 项目添加的sql 模块. 

问题二:QSqlDatabase:MYSQL driver not loaded

产生此问题的原因:从CSDN 资源下载器下载的Qt 6 关于MySQL 8.0.23 驱动有错误才导致上述问题的产生。

解决办法如下:

Qt 对应MySQL 驱动下载 ,https://github.com/thecodemonkey86/qt_mysql_driver/releases

根据自己本地Qt 版本和平台架构选择对应的MySQL  驱动包.

 

本文演示Qt 版本详情信息:

Qt 6.5.1_64位

Windows 系统

 基于MSVC_2019

我选择的驱动版本为:qsqlmysql.dll_Qt_SQL_driver_6.5.1_MSVC2019_64-bit.zip

解压后的目录:

1、 将上图目录中libmysql.dll 拷贝至D:\Qt\6.5.1\msvc2019_64\bin目录下,替换原有libmysql.dll 并删除libmysql.lib。

2、将sqldrivers 目录中的qsqlmysql.dll 和qsqlmysqld.dll拷贝至Qt 6 安装目录下的插件/驱动目录中( D:\Qt\6.5.1\msvc2019_64\plugins\sqldrivers),替换原有qsqlmysql.dll 并删除qsqlmysql.dll.debug 

Qt 6 知识拓展

Qt 版本信息输出

#include <QtCore/QCoreApplication>
#include <QSysInfo>
#include <QDebug>

int main(int argc, char* argv[])
{
	QCoreApplication a(argc, argv);

	qDebug() << "buildAbi: " << QSysInfo::buildAbi();
	qDebug() << "buildCpuArchitecture: " << QSysInfo::buildCpuArchitecture();
	qDebug() << "currentCpuArchitecture: " << QSysInfo::currentCpuArchitecture();
	qDebug() << "kernelType: " << QSysInfo::kernelType();
	qDebug() << "kernelVersion: " << QSysInfo::kernelVersion();
	qDebug() << "machineHostName: " << QSysInfo::machineHostName();
	qDebug() << "prettyProductName: " << QSysInfo::prettyProductName();
	qDebug() << "productType: " << QSysInfo::productType();
	qDebug() << "productVersion: " << QSysInfo::productVersion();

	return a.exec();
}

控制台输出结果:

buildAbi:  "x86_64-little_endian-llp64"
buildCpuArchitecture:  "x86_64"
currentCpuArchitecture:  "x86_64"
kernelType:  "winnt"
kernelVersion:  "10.0.22621"
machineHostName:  "LAPTOP-8R0KHL88"
prettyProductName:  "Windows 11 Version 22H2"
productType:  "windows"
productVersion:  "11"

查看 Docker容器中MySQL 版本信息 

[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                  NAMES
241448b9f8d6        mysql:8.0.23        "docker-entrypoint.s…"   7 months ago        Up 3 weeks          0.0.0.0:3306->3306/tcp, 33060/tcp                      mysql
1c3d38b948ba        zookeeper           "/docker-entrypoint.…"   13 months ago       Up 3 weeks          2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, 8080/tcp   zookeeper
62233dfad35b        minio/minio         "/usr/bin/docker-ent…"   13 months ago       Up 3 weeks                                                                 minio-server
[root@localhost ~]# docker exec -it 241448b9f8d6 bash
root@241448b9f8d6:/# mysql --version
mysql  Ver 8.0.23 for Linux on x86_64 (MySQL Community Server - GPL)

相关参考文章

Qt 编译MySQL 8 驱动:Qt Creator 6.1.0连接MySql8.0.23配置

Qt 连接MySQL 数据库: Qt配置mysql8

猜你喜欢

转载自blog.csdn.net/zhouzhiwengang/article/details/133219898