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

news2025/1/15 19:52:50

前提条件:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1036702.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器人过程自动化(RPA)入门 1. 什么是机器人过程自动化?

如今&#xff0c;我们生活中几乎没有任何方面不受自动化的影响。一些例子包括洗衣机、微波炉、汽车和飞机的自动驾驶模式&#xff0c;雀巢在日本的商店里使用机器人销售咖啡豆&#xff0c;沃尔玛在美国测试无人机送货&#xff0c;我们的银行支票使用光学字符识别&#xff08;OC…

【Linux】调试代码的工具 - gdb

1、安装gdb sudo yum -y install gdb【安装gdb】 2、gdb的使用 在 Linux 下&#xff0c;我们编写代码默认以 release 方式发布如果想让代码以 debug 方式发布&#xff0c;必须给 gcc 添加 -g 选项 (gdb) q / quit【退出gdb】(gdb) l / list&#xff08;list可缩写为 l&#xf…

C++的文件操作

文件操作 程序运行时产生的数据都属于临时数据&#xff0c;通过文件可将数据持久化 C中对文件操作需要包含头文件<fstream> 文件类型分为两种&#xff1a; 文本文件 - 文件以文本的ASCII码形式存储在计算机中二进制文件 - 文件以文本的二进制形式存储在计算机中&…

如何取消自动播放音乐:取消手机汽车连上后汽车自动播放音乐?

背景 手机和汽车通过蓝牙连接上之后&#xff0c;汽车音响会自动播放手机上的音乐&#xff0c;似乎是自动唤醒APP的&#xff0c;因为这些音乐APP在手机上是已经被杀了后台的了。 而且汽车的屏幕的播放列表里头会显示播放的音乐的名称&#xff0c;也有可能是视频的名称&#xf…

安卓备份分区----手动查询安卓系统分区信息 导出系统分区的一些基本操作

在玩机搞机过程中。有时候需要手动查看有些分区信息&#xff0c;或者备份分区的操作。那么今天以小米8为例解析下其中的操作步骤 机型&#xff1a;小米8 adb版本&#xff1a;https://developer.android.com/studio/releases/platform-tools 机型芯片&#xff1a;高通骁龙845…

基于微信小程序的校园商铺系统,附源码、数据库

文章目录 第一章 简介第二章 技术栈第三章&#xff1a;总体设计第四章系统详细设计4.1 前台功能模块4.2后台功能模块4.2.1管理员功能模块 五 源码咨询 第一章 简介 今天&#xff0c;为大家带来的事基于微信小程序的校园商铺系统。本系统的主要意义在于&#xff0c;全力以赴为用…

Redis双写一致性、持久化机制、分布式锁

一.双写一致性: 含义:当数据库中的数据被修改了以后&#xff0c;我们也需要同时修改缓存&#xff0c;使缓存和数据库的数据保持一致 &#xff08;1&#xff09;读操作:当请求发来的时候&#xff0c;先去看redis里面是否有对应的数据&#xff0c;如果有直接返回&#xff0c;如果…

轻量级的日志采集组件 Filebeat 讲解与实战操作

文章目录 一、概述二、Kafka 安装三、Filebeat 安装1&#xff09;下载 Filebeat2&#xff09;Filebeat 配置参数讲解3&#xff09;filebeat.prospectors 推送kafka完整配置1、filebeat.prospectors2、processors3、output.kafka 4&#xff09;filebeat.inputs 与 filebeat.pros…

【STL】vector常见用法及模拟实现(附源码)

目录 前言1. vector介绍及使用1.1vector的介绍1.2 vector的使用1.2.1 构造函数 1.2.2 vector对象遍历1.2.3 reserve和resize1.2.4 insert和erase 2. vector模拟实现2.1 vector迭代器失效问题2.2 模拟实现reserve函数浅拷贝问题2.3模拟实现源码2.3.1 vector.h2.3.2 test.cpp 前言…

org.postgresql.util.PSQLException: Bad value for type long

项目用 springbootmybatis mybatisplus&#xff0c; 数据库是&#xff1a;postgresql 。 执行查询时候返回错误。 org.springframework.dao.DataIntegrityViolationException: Error attempting to get column city_id from result set. Cause: org.postgresql.util.PSQLExce…

如何让ChatGPT为留学生所用?

“我们这一届学Data Analyics和Data Science的没一个找到工作的。”朋友饭桌上的闲话让研究生才算踏入DA圈子的我瑟瑟发抖。 还没开始正式求职的我&#xff0c;似乎已经被宣告失业了。而这一切都要“归功”于以ChatGPT为代表的大语言模型&#xff08;LLMs&#xff09;。 问世不…

接口测试练习步骤

在接触接口测试过程中补了很多课&#xff0c; 终于有点领悟接口测试的根本&#xff1b; 偶是个实用派&#xff5e;&#xff0c;那么现实中没有用的东西&#xff0c;基本上我都不会有很大的概念&#xff1b; 下面给的是接口测试的统一大步骤&#xff0c;其实就是让我们对接口…

第9章 【MySQL】InnoDB的表空间

表空间 是一个抽象的概念&#xff0c;对于系统表空间来说&#xff0c;对应着文件系统中一个或多个实际文件&#xff1b;对于每个独立表空间来说&#xff0c;对应着文件系统中一个名为 表名.ibd 的实际文件。大家可以把表空间想象成被切分为许许多多个 页 的池子&#xff0c;当我…

机器学习之正则化与验证提高模型泛化

文章目录 正则化&#xff08;Regularization&#xff09;&#xff1a;验证&#xff08;Validation&#xff09;&#xff1a; 正则化和验证是机器学习中重要的概念&#xff0c;它们帮助提高模型的性能和泛化能力。让我详细介绍一下这两个概念&#xff1a; 正则化&#xff08;Re…

【Git】轻松学会 Git:深入理解 Git 的基本操作

文章目录 前言一、创建 Git 本地仓库1.1 什么是仓库1.2 创建本地仓库1.3 .git 目录结构 二、配置 Git三、认识 Git 的工作区、暂存区和版本库3.1 什么是 Git 的工作区、暂存区和版本库3.2 工作区、暂存区和版本库之间的关系 四、添加文件4.1 添加文件到暂存区和版本库中的命令4…

php文件上传功能(文件上传)

实现文件上传是Web开发中常用的功能之一&#xff0c;而PHP也是支持文件上传的。那么&#xff0c;下面我们就来介绍一下常用的PHP实现文件上传的方法。 使用HTML表单实现文件上传 HTML表单是Web开发中最基本的元素之一&#xff0c;它可以接收用户输入的数据&#xff0c;并通过…

第75步 时间序列建模实战:多步滚动预测 vol-3(以决策树回归为例)

基于WIN10的64位系统演示 一、写在前面 上两期&#xff0c;我们讲了多步滚动预测的第两种策略&#xff1a; 对于重复的预测值&#xff0c;取平均处理。例如&#xff0c;&#xff08;1,2,3&#xff09;预测出3.9和4.5&#xff0c;&#xff08;2,3,4&#xff09;预测出5.2和6.…

【深度学习】ONNX模型快速部署【入门】

【深度学习】ONNX模型快速部署【入门】 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】ONNX模型快速部署【入门】前言搭建打包环境打包可执行文件总结 前言 之前的内容已经尽可能简单、详细的介绍CPU【Pytorch2ONNX】和GPU【Pyto…

MySQL常见join关联查询分析

1、join关联查询七大类型结构图 2、建表语句 CREATE TABLE t_dept (id INT(11) NOT NULL AUTO_INCREMENT,deptName VARCHAR(30) DEFAULT NULL,address VARCHAR(40) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEINNODB AUTO_INCREMENT1 DEFAULT CHARSETutf8;CREATE TABLE t_emp (id…

均匀辐照度和局部遮光条件下光伏系统的新型样条-MPPT技术(Simulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…