编译QT Mysql库并集成使用

安装MSVC编译器与Windows 10 SDK

打开Visual Studio Installer,如果已经安装过内容了可能是如下页面,点击修改(头一回打开的话不需要这一步):
[图片]

然后在工作负荷中勾选使用C++的桌面开发,它会帮我们勾选好一些组件,以及一个Windows 10 SDK:
[图片]

选择win10 sdk
[图片]

在单个组件中勾选自己要安装的编译器,此处安装了MSVC2015、MSVC2017、MSVC2019:
[图片]

QCreator编译mysql dll

1.查看当前QT在msvc2017_64下的数据库插件类型
[图片]

检查mingw73_64/plugins/sqldrivers目录下是否存在qsqlmysql.dll文件,没有就需要编译mysql驱动。
2.在项目中,选择需要构建的源目录
[图片]

3.点击编辑,打开mysql.pro文件进行配置
[图片]

附mysql.pro源文件:

TARGET = qsqlmysqlHEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp#QMAKE_USE += mysqlOTHER_FILES += mysql.jsonPLUGIN_CLASS_NAME = QMYSQLDriverPlugininclude(../qsqldriverbase.pri)LIBS += "D:\Library\mysql-5.7.32-winx64\lib\libmysql.lib"
INCLUDEPATH += "D:\Library\mysql-5.7.32-winx64\include"
DESTDIR = ../mysql/qtMyLib

附qsqldriverbase.pri文件:

QT  = core core-private sql-private# For QMAKE_USE in the parent projects.
#include($$shadowed($$PWD)/qtsqldrivers-config.pri)include(./configure.pri)PLUGIN_TYPE = sqldrivers
load(qt_plugin)DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII

4.下载mysql对应版本的内容
https://downloads.mysql.com/archives/community/
[图片]

解压如下:
[图片]

5.进行编译
[图片]

先点锤子,再点执行,出现如下图片即成功:
[图片]

(1)出现错误:QMAKE_MSC_VER isn’t set

进入文件夹D:\Library\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\common,打开msvc-version.conf文件,添加
QMAKE_MSC_VER = 1900,对应如下:
[图片]

(2)出现错误:Library ‘mysql’ is not defined,在qt左侧栏中双击打开mysql.pro

将#QMAKE_USE += mysql这一行注释掉

(3)mysql和编译器的位数要一致,mysql是64位,那么上述三个文件都要复制到64位的编译器中

一定要复制到mysql对应位数的编译器中,然后在构建的时候,注意选择需要生成的应用是32位还是64位。

6.DESTDIR 定义编译后lib的路径,寻找编译后的数据
[图片]

7.将文件复制到编译器的5.14.2\msvc2017_64\plugins\sqldrivers中
[图片]

8.将mysql的dll复制到项目的执行目录下
[图片]

(4)QSqlDatabase::drivers 返回空

把5.14.2\msvc2017_64\plugins\sqldrivers文件夹全部拷贝到项目的执行目录下。
[图片]

QSqlDatabase集成mysql

1.cmakelist添加SQL依赖

find_package(Qt5 COMPONENTSCoreGuiWidgetsSqlREQUIRED)add_executable(QtDemo2 main.cppsql_process.hsql_process.cpp)target_link_libraries(QtDemo2Qt5::CoreQt5::GuiQt5::WidgetsQt5::Sql
)

2.新建表

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for users
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users`  (`id` INT(11) NOT NULL AUTO_INCREMENT,`username` VARCHAR(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`password` VARCHAR(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`permission` INT(2) NOT NULL,PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `username`(`username`) USING BTREE
) ENGINE = INNODB AUTO_INCREMENT = 40 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;-- ----------------------------
-- Records of users
-- ----------------------------
INSERT INTO `users` VALUES (1, 'admin', '123456', 1);
INSERT INTO `users` VALUES (32, 'xfgc', '肖1111', 2);
INSERT INTO `users` VALUES (39, '123', '哲222', 1);SET FOREIGN_KEY_CHECKS = 1;

3.sql常用操作

//
// Created by zhe.xiao on 2023/11/22.
//#include "sql_process.h"
#include <QSqlDatabase>
#include <QStringlist>
#include <QSqlQuery>
#include <QVariant>
#include <QSqlError>
#include <QSqlRecord>void SqlProcess::connect()
{qDebug("SqlProcess started....");QSqlDatabase dbLink = QSqlDatabase::addDatabase("QMYSQL");dbLink.setPort(3306);dbLink.setDatabaseName("ws300");dbLink.setHostName("localhost"); //连接本地主机dbLink.setUserName("root");dbLink.setPassword("Xi1ozh#1");if (!dbLink.open()){qDebug("SqlProcess QSqlDatabase Database Open Failed!!");}QSqlQuery query(dbLink);QString sql = QString("select * from users;");if (query.exec(sql)){qDebug("SqlProcess QSqlQuery Succceed!!");int fieldNo = query.record().indexOf("password");while (query.next()){std::string a1 = query.value(fieldNo).toString().toStdString();std::string b1 = query.value(1).toString().toStdString();std::string c1 = query.value(2).toString().toStdString();std::string d1 = query.value(3).toString().toStdString();qDebug("SqlProcess QSqlQuery Data %s %s %s %s", a1.c_str(), b1.c_str(), c1.c_str(), d1.c_str());}}dbLink.close();qDebug("SqlProcess finished....");
}

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

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

相关文章

什么?Postman也能测WebSocket接口了?

01 WebSocket 简介 WebSocket是一种在单个TCP连接上进行全双工通信的协议。 WebSocket使得客户端和服务器之间的数据交换变得更加简单&#xff0c;允许服务端主动向客户端推送数据。在WebSocket API中&#xff0c;浏览器和服务器只需要完成一次握手&#xff0c;两者之间就直接…

将邻接矩阵转换成图

import matplotlib.pyplot as plt import networkx as nx import numpy as np# 示例的邻接矩阵 adjacency_matrix np.array([[0, 1, 1, 0],[1, 0, 1, 1],[1, 1, 0, 1],[0, 1, 1, 0] ])# 创建一个无向图 G nx.Graph()# 添加节点 num_nodes len(adjacency_matrix) G.add_nodes…

大数据技能大赛(高职组)答案

任务C&#xff1a;数据挖掘&#xff08;10分&#xff09; 所有模块都有&#xff0c;不是白嫖&#xff01;&#xff01;有需要可以联系我 环境说明&#xff1a; 服务端登录地址详见各任务服务端说明。 补充说明&#xff1a;各节点可通过Asbru工具或SSH客户端进行SSH访问&#xf…

成长在于积累——https 认证失败的学习与思考

1. 引言 本周二长城项目在收尾过程中&#xff0c;出现了一个车端无法进行注册的问题&#xff1a;curl提示证书认证失败&#xff08;其实已经能确认问题方向了&#xff0c;运维人员去确认证书问题即可&#xff09;。虽然最终的原因是由于长城运维人员导致的。但是这个过程让我颇…

opencv- CLAHE 有限对比适应性直方图均衡化

CLAHE&#xff08;Contrast Limited Adaptive Histogram Equalization&#xff09;是一种对比度有限的自适应直方图均衡化技术&#xff0c;它能够提高图像的对比度而又避免过度增强噪声。 在OpenCV中&#xff0c;cv2.createCLAHE() 函数用于创建CLAHE对象&#xff0c;然后可以…

宝宝照片保存大法!一键制作照片书

亲爱的家长们&#xff0c;你们是否为宝宝成长过程中的各种美好瞬间而感到兴奋和感动&#xff1f;宝宝的笑容、第一次学步、第一次叫妈妈爸爸……这些珍贵的瞬间&#xff0c;我们都想把它们永远保存下来。现在&#xff0c;我们有一款神奇的工具&#xff0c;一键制作照片书&#…

还不知道指针和引用的区别,一篇文章教会你

1、引用的概念 1.引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名 2.编译器不会为引用变量开辟内存空间&#xff0c;它和它引用的变量共用同一块内存空间 比如:孙悟空&#xff0c;可以叫他孙悟空&#xff0c;也可以叫齐天大圣。本质他们就是一个人 2、引用的定…

[nlp] RuntimeError: Llama is supposed to be a BPE model!报错解决

# tokenizer AutoTokenizer.from_pretrained(BASE_MODEL) 改成这个legacyFalse, use_fastFalse&#xff1a; tokenizer AutoTokenizer.from_pretrained(BASE_MODEL, legacyFalse, use_fastFalse)

【C++初阶】STL详解(五)List的介绍与使用

本专栏内容为&#xff1a;C学习专栏&#xff0c;分为初阶和进阶两部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握C。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;C &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&…

vs调试输出,不显示线程已退出

如题&#xff1a;一堆线程退出的信息&#xff0c;招人烦。 其实在vs设置里可以关闭&#xff1a; 工具-->选项-->调试-->输出窗口&#xff1a;

java--ArrayList快速入门

1.什么是集合&#xff1f; 集合是一个容器&#xff0c;用来装数据的&#xff0c;类似于数组。 2.有数组&#xff0c;为啥还学习集合 ①数组定义完成并启动后&#xff0c;长度是固定了。 ②集合大小可变&#xff0c;开发中用的更多。 3.ArrayList<E> 是用的最多、最…

Linux C 基于tcp和epoll在线聊天室

基于tcp和epoll在线聊天室 说明服务端代码 说明 服务端&#xff1a;实现了验证用户是否已经存在&#xff08;支持最大64用户连接&#xff09;支持广播用户进入退出聊天室以及用户聊天内容。   这里只提供里服务端代码&#xff0c;如果想要看客户端代码点击这里。 服务端代码…

LINUX入门篇【8】----计算机组成原理以及OS知识的总结

前言&#xff1a; 从而本篇文章开始&#xff0c;我们将进入LINUX的进程篇&#xff0c;但学习进程之前&#xff0c;我们首先需要重新认识我们的计算机&#xff0c;并且正确认识到控制进程的OS&#xff0c;即操作系统是怎样在计算机运行的过程中起到作用的。下面就让我们一同去了…

规则引擎Drools使用,0基础入门规则引擎Drools(一)基础入门

文章目录 系列文章索引一、规则引擎概述1、引出问题2、什么是规则引擎3、使用规则引擎的优势4、规则引擎应用场景 二、Drools介绍1、Drools概述2、Drools构成3、相关概念说明4、Drools执行过程5、KIE介绍 三、Drools入门案例1、业务场景说明2、开发实现 四、Drools基础语法1、规…

D. Secret Santa(构造)

首先n点n边&#xff0c;是一个基环树&#xff0c; 可以观察得到其实最大值是不变的 剩下的人自己随便找个人匹配即可 所以关键是构造一个方案解决匹配到自己的情况 找到所有没送出礼物的人&#xff0c;然后直接匹配&#xff0c;如果匹配到自己 因为没有送出礼物的人想送出…

配置静态 Eth-trunk

1、需求 1&#xff09;交换网络中存在2个 VLAN – 10 和 20 2&#xff09;每个VLAN的IP地址为&#xff1a;192.168.xx.0/24&#xff08;xx为 vlan 号&#xff09; 3&#xff09;对交换机之间的链路进行链路捆绑&#xff0c;增加互联带宽 4&#xff09;确保同 VLAN的 PC 之间互…

【Web实战】浅谈reactor netty httpclient请求解析过程

目录 0x00 前言 0x01 "畸形scheme"HTTP请求 0x02 其他 0x00 前言 Reactor Netty HttpClient 是 Reactor Netty 框架提供的一个用于进行异步 HTTP 请求的客户端库。它基于 Reactor 框架&#xff0c;采用响应式编程模型&#xff0c;允许以非阻塞的方式执行 HTTP 请…

如何通过RA过程识别Redcap UE?

以下是38.300中的描述 RedCap UE可以通过发送MSG3/MSGA的特定LCID识别&#xff0c;可选条件是通过MSGA/MSG1的PRACH occasion/PRACH preamble识别&#xff0c;根据这段描述&#xff0c;通过MSG3/MSGA的识别是必须项&#xff0c;而MSGA/MSG1的识别过程是可选项。如果通过MSGA/MS…

三极管基础知识

三极管 基本概念应用电路 基本概念 三极管 NPN 和PNP 电流方向 PNP是从e 流向 b c NPN是从 b c流向e 应用电路 箭头出发方向的电极比箭头指向方向的电极&#xff0c;高0.7v才导通。 NPN控制下游是否接到地&#xff0c;PNP控制上游的电源能否接过来。

笔试题之指针结合数组的精讲2

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…