编译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.hqwc.cn/news/207659.html

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

相关文章

SpringMVC问题

文章目录 SpringMVC运行流程MVC的概念与请求在MVC中的执行路径&#xff0c;ResponsBody注解的用途SpringMVC启动流程 SpringMVC运行流程 • 客户端&#xff08;浏览器&#xff09;发送请求&#xff0c;直接请求到 DispatcherServlet 。 • DispatcherServlet 根据请求信息调用 …

008 OpenCV matchTemplate 模板匹配

目录 一、环境 二、模板匹配算法原理 三、代码演示 一、环境 本文使用环境为&#xff1a; Windows10Python 3.9.17opencv-python 4.8.0.74 二、模板匹配算法原理 cv.matchTemplate是OpenCV库中的一个函数&#xff0c;用于在图像中查找与模板匹配的特征。它的主要应用场景…

函数式编程-Stream流笔记-三更草堂

函数式编程-Stream流 1. 概述 1.1 为什么学&#xff1f; 能够看懂公司里的代码 大数量下处理集合效率高 代码可读性高 消灭嵌套地狱 //查询未成年作家的评分在70以上的书籍 由于数据中作家和书籍可能出现重复&#xff0c;需要进行去重 List<Book> bookList new Ar…

Shell判断:模式匹配:case(三)

系统管理工具箱 1、需求&#xff1a;Linux提供的丰富的管理命令&#xff0c;用户管理&#xff0c;内存管理&#xff0c;磁盘管理&#xff0c;进程管理&#xff0c;日志管理&#xff0c;文件管理&#xff0c;软件管理&#xff0c;网络管理等等数十个工具包。如果你能通过shell编…

Java互联网+公立医院绩效考核源码

一、建设信息化医院绩效考核的意义 1.提高考核效率&#xff1a;通过信息化手段&#xff0c;可以将绩效考核数据自动采集、整理、分析和报告&#xff0c;大大提高了考核效率&#xff0c;减少了人工干预和错误率。 2.增强考核公正性&#xff1a;信息化考核可以减少人为因素的干…

CAS方式实现单点登录SSO

1. CAS介绍 CAS&#xff08;Central Authentication Service&#xff09;中心认证服务 下面这张图来自官网&#xff0c;清晰简单的介绍了CAS的继续交互过程 2. CAS具体实现 首先需要分别搭建CAS-server和CAS-client服务&#xff0c; 这两个服务分别在2台机器上&#xff0c;…

关于ego-planner里面的GridMap

浙大这套开源的代码写得很nice 很值得借鉴 &#xff0c; 对于 GridMap 类的实现。该类通过智能指针的封装简化了 GridMap 实例的创建和管理过程。一旦通过 GridMap::initMap(ros::NodeHandle &nh) 方法初始化&#xff0c;就可以方便地调用 GridMap 及其所有相关功能 它主要…

C语言--每日五道选择题-- Day22

第一题&#xff08;注意&#xff09; 1.下列 C 代码中&#xff0c;不属于未定义行为的有&#xff1a;______。 A&#xff1a;int i0; i(i); B&#xff1a;char *p"hello"; p[1]E; C&#xff1a;char *p"hello"; char ch*p; D&#xff1a;int i0; printf(&q…

Oracle的控制文件多路复用,控制文件备份,控制文件手工恢复

一.配置控制文件多路复用 1.查询Oracle的控制文件所在位置 SQL> select name from v$controlfile;NAME -------------------------------------------------------------------------------- /u01/app/oracle/oradata/orcl/control01.ctl /u01/app/oracle/fast_recovery_a…

优思学院|质量管理怎样才能做好?

质量管理怎样才能做好&#xff1f;这是一个好问题&#xff0c;很多人第一时间会想到建立一个稳定的质量管理体系&#xff0c;例如ISO9001&#xff0c;又或者善用QC七大手法等等&#xff0c;虽然以上这些方法都是实用和正确的&#xff0c;绝大多数企业通常最忽略的&#xff0c;其…

数据结构学习笔记——多维数组、矩阵与广义表

目录 一、多维数组&#xff08;一&#xff09;数组的定义&#xff08;二&#xff09;二维数组&#xff08;三&#xff09;多维数组的存储&#xff08;四&#xff09;多维数组的下标的相关计算 二、矩阵&#xff08;一&#xff09;特殊矩阵和稀疏矩阵&#xff08;二&#xff09;…

专业远程控制如何塑造安全体系?向日葵“全流程安全闭环”解析

安全是远程控制的重中之重&#xff0c;作为国民级远程控制品牌&#xff0c;向日葵远程控制就极为注重安全远控服务的塑造。近期向日葵发布了以安全和核心的新版“向日葵15”以及同步发布《贝锐向日葵远控安全标准白皮书》&#xff08;下简称《白皮书》&#xff09;&#xff0c;…