QT5.14.2与Mysql8.0.16配置笔记
1、前言
我的QT版本为 qt-opensource-windows-x86-5.14.2。这是QT官方能提供的自带安装包的最近版本,更新的版本需要自己编译源代码,可点击此链接进行下载:Index of /archive/qt/5.14/5.14.2,选择下载 qt-opensource-windows-x86-5.14.2.exe 。另外,在安装QT的时候一定要安装源代码!一定要安装源代码!一定要安装源代码!不然到时候还要重新安装,只需要在安装的时候勾选上安装 Source 即可,如下所示:
我的MySQL版本为 mysql8.0.16,可通过mysql -V命令进行查看,如下所示:
该版本的MySQL是64位的!记住,这个很重要!一定要保证QT工程的位数和Mysql的位数一致!
2、准备工作
要在QT中操作MySQL数据库,需要在QT的工程文件.pro中添加如下命令:
加完之后别忘了保存,并重新编译一下工程。
在QT中可以打印一下当前QT版本支持的数据库:
#include <QSqlDatabase>qDebug() << QSqlDatabase::drivers();
打印出的结果如下:
通过查看QT的安装目录,也可以发现在QT的安装目录中并没有MySQL的动态链接库,我的查看目录如下所示:
版本不同目录可能不一样,但基本上都是在mingwXX_XX\plugins\drivers目录下。需要注意的是,mingwXX_XX一定要和你的QT工程采用的编译器保持一致!
可见,当前QT版本并不支持MySQL。
所以我们需要通过重新编译的方式生成MySQL的动态链接库。
3、重新编译MySQL动态链接库
首先找到QT的源代码安装目录(这就是为什么一定要安装QT的Source,我当时找不到这个郁闷了半天),找到mysql.pro工程,我的具体目录如下所示:
然后在QT中打开mysql.pro,配置工程,选择编译器,和你的QT工程的编译器保持一致:
然后按照如下方式修改mysql.pro文件:
首先注释掉 QMAKE_USE += mysql ,然后分别添加INCLUDEPATH(在mysql安装目录下,换成自己的)和LIBS(在mysql安装目录下,换成自己的),和DESTDIR(这个是动态库的生成目录,直接按上面的写法写就行)。.pro文件修改完成之后保存,然后直接编译(点击QT左下角的锤子标志),直接编译即可,其他的不用管。此时,就可以下当前工程目录下找到新生成的mysql动态库文件,如下所示:
至此,mysql的动态链接库生成完毕。
4、配置QT
前面已经生成好mysql的动态链接库,接下来需要将生成的库拷贝到正确的目录下就可以了。
首先,将生成的三个库文件全部拷贝到QT的数据库引擎目录下(注意编译器的选择,和你的QT工程保持一致),如下所示:
然后将,MySQL安装目录下的mysql库文件,如下所示:
拷贝到QT的目录下,目录如下所示(注意编译器文件的选择):
此时,关于QT中MySQL的配置已经全部完成。通过上面的语句可以看到,当前的QT已经支持MYSQL了:
5、MySQL的简单操作
5.1、连接数据库
//链接数据库QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");db.setHostName("127.0.0.1");db.setUserName("root");db.setPassword("pwd");db.setDatabaseName("db_test");if(!db.open()){qDebug() << "未成功链接到数据库";}else{qDebug() << "成功链接到数据库";}
5.2、插入数据
QSqlQuery query(db);bool re = query.exec("INSERT INTO table_name (col1, col2, col3) VALUES (1, 1, 2)");//bool re = query.exec("insert into table_name values(3, 1, 2)");if(!re){qDebug() << "操作数据库失败!" ;}else{qDebug() << "操作数据库成功!" ;}
5.3、更新数据表
bool re = query.exec("update table_name set col2=2, period=1 where col1=1");if(!re){qDebug() << "操作数据库失败!" ;}else{qDebug() << "操作数据库成功!" ;}
5.4、读取数据表
QSqlQuery db_cursor(db);QString cmd = QString("select * from table_name");db_cursor->exec(cmd);if(db_cursor->size() == -1){qDebug() << QString("数据表 <table_name> 操作异常,请检查... ");return;}else if(db_cursor->size() == 0){qDebug() << QString("数据表 <table_name> 没有数据,请检查... ");return;}else{while(db_cursor->next()){int col0= db_cursor->value(0).toInt();QString col1= db_cursor->value(1).toString();}}
附:Mysql8.0.16安装教程
1、去官网下载要安装的mysql版本
Mysql官网下载地址,点击下载
点击Archives,可以选择你想要下载的版本,这里我安装的是8.0.16版本。
下载完成后,解压之后的目录结构:
2、配置初始化的my.ini文件
在解压之后的目录结构中添加一个my.ini文件,在根目录下新建一个文本文档,将下面内容复制进去,保存后重命名为my.ini
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
#basedir=C:\Program Files\MySQL
basedir=D:\mysql\mysql8
# 设置mysql数据库的数据的存放目录
#datadir=C:\Program Files\MySQL\Data
datadir=D:\mysql\mysql8\Data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。
max_connect_errors=10
# 服务端使用的字符集默认为utf8mb4
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
#mysql_native_password
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8mb4
注意:
mysql的安装目录和数据存放目录要改成你自己的目录。
数据存放目录的data文件夹,不要自己手动创建。
3、初始化MySQL
在安装的时候,为了避免出错,我们以管理员的身份去运行CMD(重要),避免出现安装失败的情况。
bin目录下执行下面的命令:
mysqld --initialize --console
注意: [MY-010454] [服务器]为root @ localhost生成临时密码:pIsuy2ZsFw)o。在没有更改密码前,需要记住这个密码,后续登录需要用到。复制密码先保存起来!!!
4、安装MySQL服务,并启动MySQL服务
(1)安装mysql服务
执行下面的命令:
mysqld --install [服务名] (服务名可以不加默认是mysql)
如果显示 service successfully installed 证明安装成功了。
服务安装成功之后执行下面命令启动mysql服务:
net start mysql
5、配置MySQL环境变量
【此电脑】右击属性——>【高级系统设置】——>进入系统属性窗口点击【环境变量】
D:\mysql\mysql8\bin
到此,环境变量配置完毕!
6、检查MySQL服务是否启动
有时候MySQL的服务不会自动启动,那么需要我们在连接数据库之前去手动启动MySQL的服务。
右键计算机——>管理——>服务和应用程序——>服务,在右侧栏目中找到名称为MySQL的服务。如果没有启动的话,这个时候它的状态应该是空,即未启动,启动此服务就OK了。
7、连接MySQL,并修改密码
使用Navicat去连接本地mysql。第一次连接密码时要使用默认密码(就是初始化mysql的时候我们复制的密码)。点击连接测试会显示连接成功。紧接着会弹出让你修改密码的弹框,重置密码即可。
走到这一步,恭喜你已经成功安装✨
8.命令行操作数据库常用命令
#启动mysql服务器
net start mysql#初始管理员登录
mysql -u root -p#先创建一个数据库
create database mydatabase;#再创建一张表
create table student(id integer unsigned primary key,name varchar(16) not null,birth date
)charset utf8;#查询表格
select * from student;#插入数据
insert into student values (1, "tom", "1999-9-9");#创建一个用户,%指定所有电脑都可以登录
create user "test"@"%" identified by "test";#授权操作
grant select, insert, create on *.* to "test"@"%";#退出
exit#用tset用户登录
mysql -u tset -p#先创建一个数据库
create database mydatabase1;#使用数据库
use mydatabase1;#再创建一张表
create table student1(id integer unsigned primary key,name varchar(16) not null,birth date
)charset utf8;#插入数据
insert into student1 values (1, "tom", "1999-9-9");
insert into student1 values (2, "jack", "2000-1-1");
insert into student1 values (3, "aa", "2022-2-2");#查询表格
select * from student1;#退出
exit#指定任何一台电脑都可以登录
vim /etc/mysql/mysql.conf.d/mysqld
#将 bind-address =127.0.0.1改为
bind-address =0.0.0.0#重启mysql
service mysql restart
附:Navicat安装教程
一、下载
链接:https://pan.baidu.com/s/14t2MTbyB3A72H7NcNBLcjQ
提取码:e6o0
二、安装
1、解压和安装这两个文件
2、将简体中文64位的文件复制到Navicat12文件夹内
3、Navicat的简单操作
过期日期为1899、12、30即破解成功
(1)点击试用
(2)点击左上角链接MySQL,然后按设置链接名:并输入密码(就是初始化mysql的时候我们复制的密码)。确定
(3)右键root打开连接
如果密码输入错误,则会报1045错误
参考:
1.MySQL 8.0.16 安装教程(超详细)
2.[新人向]MySQL和Navicat下载、安装及使用详细教程
3.如何在cmd命令行下切换目录
4.以管理员身份运行CMD命令
5.安装MySQL8.0.16及环境变量配置教程
6.解决Install/Remove of the Service Denied报错
相关文章:

QT5.14.2与Mysql8.0.16配置笔记
1、前言 我的QT版本为 qt-opensource-windows-x86-5.14.2。这是QT官方能提供的自带安装包的最近版本,更新的版本需要自己编译源代码,可点击此链接进行下载:Index of /archive/qt/5.14/5.14.2,选择下载 qt-opensource-windows-x86…...

判断是否为完全二叉树
目录 分析 分析 1.完全二叉树的概念:对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树。 2.思路:可以采…...

【笔记】记一次redis将从节点变成主节点 主节点变成从节点
1.连上虚拟机centos7 2.打开finalshell连接虚拟机 将从节点变为主节点 输出redis-cli -p 要变成主节点的从节点 -a此从节点的密码 输入 replicaof no one 查看端口状态 info replication 总结: redis-cli -p 端口号 -a 密码 replicaof no one info replicati…...
解析Java中1000个常用类:DoubleSummaryStatistics类,你学会了吗?
在线工具站 推荐一个程序员在线工具站:程序员常用工具(http://cxytools.com),有时间戳、JSON格式化、文本对比、HASH生成、UUID生成等常用工具,效率加倍嘎嘎好用。程序员资料站 推荐一个程序员编程资料站:程序员的成长之路(http://cxyroad.com),收录了一些列的技术教程…...

WAIC热点聚焦|新质生产力与低空经济
WAIC热点聚焦|新质生产力与低空经济 概览 # WAIC热点聚焦 | 新质生产力与低空经济## 1. 新质生产力定义与特点 - 新质生产力是在新的经济社会发展阶段中形成的,具有变革性和高增长潜力的生产能力。## 2. 低空经济概念与构成 ### 2.1 低空经济定义 - 低空经济是依托…...

Docker部署ETCD 3.5.14(保姆级图文教程)
系列文章目录 Docker部署Nginx 1.21.5(保姆级图文教程) Docker部署MySQL 8.3.0(保姆级图文教程) Docker部署ETCD 3.5.14(保姆级图文教程) 文章目录 一、环境二、拉取镜像2.1 查找 Docker Hub 上的 ETCD 镜像…...

2024年7月6日 (周六) 叶子游戏新闻
自动电脑内部录音器AutoAudioRecorder: 是一款免费的自动音频录制软件,可直接将电脑内部所有的声音录制成 mp3/wav 文件,包括音乐、游戏直播、网络会议、聊天通话等音频源。 卸载工具 HiBitUninstaller: Windows上的软件卸载工具 《不羁联盟》制作人&…...
python爬虫入门(二)之Requests库
一、储备篇 1、requests库让我们可以通过python代码去构建和发送HTTP请求 2、第三方库,要先安装 python终端,输入pip install requests successfully installed:安装成功 requirement already satisfied: 说明已经安装过,无需…...

Git 操作补充:cherry-pick、变基
1. 挑选提交合并 git cherry-pick 对于多分支的代码库,将代码从一个分支转移到另一个分支是一种常见的需求,这可以分成两种情况:一种情况是,你需要另一个分支的所有代码变动,那么就采用 git merge;另一种情…...

在 PostgreSQL 中,如何处理大规模的文本数据以提高查询性能?
文章目录 一、引言二、理解 PostgreSQL 中的文本数据类型三、数据建模策略四、索引选择与优化五、查询优化技巧六、示例场景与性能对比七、分区表八、数据压缩九、定期维护十、总结 在 PostgreSQL 中处理大规模文本数据以提高查询性能 一、引言 在当今的数据驱动的世界中&…...

秋招提前批面试经验分享(下)
⭐️感谢点开文章👋,欢迎来到我的微信公众号!我是恒心😊 一位热爱技术分享的博主。如果觉得本文能帮到您,劳烦点个赞、在看支持一下哈👍! ⭐️我叫恒心,一名喜欢书写博客的研究生在读…...

零基础STM32单片机编程入门(七)定时器PWM波输出实战含源码视频
文章目录 一.概要二.PWM产生框架图三.CubeMX配置一个TIME输出1KHZ,占空比50%PWM波例程1.硬件准备2.创建工程3.测量波形结果 四.CubeMX工程源代码下载五.讲解视频链接地址六.小结 一.概要 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写&…...

【ubuntu自启shell脚本】——在ubuntu中如何使用系统自带的启动应用程序设置开机自启自己的本地shell脚本
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、设置开机自启shell脚本1.使用 gnome-session-properties2.测试的shell例程代码 总结 前言 在Ubuntu系统中设置开机自启脚本是一种重要的自动化方法。开机自…...
nodejs配置国内镜像
# 设置淘宝镜像 npm config set registry https://registry.npmmirror.com# 查看镜像源 npm get registry...

【JavaEE】多线程进阶
🤡🤡🤡个人主页🤡🤡🤡 🤡🤡🤡JavaEE专栏🤡🤡🤡 文章目录 1.锁策略1.1悲观锁和乐观锁1.2重量级锁和轻量级锁1.3自旋锁和挂起等待锁1.4可…...
大模型LLM面试常见算法题-包括Attention和Transformer常见面试题
大模型: 位置编码有哪些? 介绍LoRA与QLoRA RAG和微调的区别是什么? 哪些因素会导致LLM的偏见? 什么是思维链(CoT)提示? Tokenizer的实现方法及原理 解释一下大模型的涌现能力?…...

90元搭建渗透/攻防利器盒子!【硬件篇】
前言 以下内容请自行思考后进行实践。 使用场景 在某些情况下开软件进行IP代理很麻烦,并不能实现真正全局,而且还老容易忘记,那么为了在实景工作中,防止蓝队猴子封IP,此文正现。 正文 先说一下实验效果࿱…...

用vue2+elementUI封装手机端选择器picker组件,支持单选、多选、远程搜索多选
单选注意点: touchmove.prevent: 在 touchmove 事件上添加 .prevent 修饰符,以阻止默认的滚动行为。 handleTouchStart: 记录触摸开始的 Y 坐标和当前的 translateY 值。 handleTouchMove: 计算触摸移动的距离,并更新 translateY 值。 han…...

『古籍自有答案』古风H5案例赏析
「古籍自有答案」,一部由新京报与字节跳动公益联合打造的古风H5,以诗意盎然的开篇引领用户穿梭于千年文脉。 part1. 创意定位 "人生有惑问先贤,先贤答案存古籍",在这里,每一个灵魂的探问,都能在…...
Laravel模型事件完全指南:触发应用程序的动态行为
标题:Laravel模型事件完全指南:触发应用程序的动态行为 在Laravel框架中,模型事件提供了一种优雅的方式来处理Eloquent模型生命周期中的各种关键时刻。通过监听和响应这些事件,开发者可以自动化许多常见的任务,如日志…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...

dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...