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报错

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习】基于线性回归的医疗费用预测模型

文章目录 一、线性回归定义和工作原理假设表示 二、导入库和数据集矩阵表示可视化 三、成本函数向量的内积 四、正态方程五、探索性数据分析描述性统计检查缺失值数据分布图相关性热图保险费用分布保险费用与性别和吸烟情况的关系保险费用与子女数量的关系保险费用与地区和性别…

Halcon 铣刀刀口破损缺陷检测

一 OTSU OTSU&#xff0c;是一种自适应阈值确定的方法,又叫大津法&#xff0c;简称OTSU&#xff0c;是一种基于全局的二值化算法,它是根据图像的灰度特性,将图像分为前景和背景两个部分。当取最佳阈值时&#xff0c;两部分之间的差别应该是最大的&#xff0c;在OTSU算法中所采…

张量分解(2)——张量运算(内积、外积、直积、范数)

&#x1f345; 写在前面 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;这里是hyk写算法了吗&#xff0c;一枚致力于学习算法和人工智能领域的小菜鸟。 &#x1f50e;个人主页&#xff1a;主页链接&#xff08;欢迎各位大佬光临指导&#xff09; ⭐️近…

Stream流真的很好,但答应我别用toMap()

你可能会想&#xff0c;toList 和 toSet 都这么便捷顺手了&#xff0c;当又怎么能少得了 toMap() 呢。 答应我&#xff0c;一定打消你的这个想法&#xff0c;否则这将成为你噩梦的开端。 让我们先准备一个用户实体类。 Data AllArgsConstructor public class User { priv…

【C#】函数方法、属性分文件编写

1.思想 分文件编写是面向对象编程的重要思想&#xff0c;没有实际项目作为支撑很难理解该思想的精髓&#xff0c;换言之&#xff0c;一两个函数代码量因为太少无法体现分文件编写减少大量重复代码的优势。 2.项目结构介绍 整项目的名称叫AutoMetadata&#xff0c;是一个基于W…

【第三版 系统集成项目管理工程师】第4章 信息系统架构

持续更新。。。。。。。。。。。。。。。 【第三版】系统集成项目管理工程师 考情分析4.1架构基础4.1.1指导思想&#xff08;非重点&#xff09; P1364.1.2设计原则&#xff08;非重点&#xff09; P1364.1.3建设目标&#xff08;非重点&#xff09; P1374.1.4总体框架 P138练习…

【web前端HTML+CSS+JS】--- CSS学习笔记02

一、CSS&#xff08;层叠样式表&#xff09;介绍 1.优势 2.定义解释 如果有多个选择器共同作用的话&#xff0c;只有优先级最高那层样式决定最终的效果 二、无语义化标签 div和span&#xff1a;只起到描述的作用&#xff0c;不带任何样式 三、标签选择器 1.标签/元素选择器…

什么牌子的头戴式蓝牙耳机好性价比高?

说起性价比高的头戴式蓝牙耳机,就不得不提倍思H1s,作为倍思最新推出的新款,在各项功能上都实现了不错的升级,二字开头的价格,配置却毫不含糊, 倍思H1s的音质表现堪称一流。它采用了40mm天然生物纤维振膜,这种振膜柔韧而有弹性,能够显著提升低音的量感。无论是深沉的低音还是清…

Android 10年,35岁,该往哪个方向发力

网上看到个网友发的帖子&#xff0c;觉的这个可能是很多开发人员都会面临和需要思考的问题。 不管怎样&#xff0c; 要对生活保持乐观&#xff0c;生活还是有很多的选择和出路的。 &#xff08;内容来自网络&#xff0c;不代表个人观点&#xff09; 《Android Camera开发入门》…

机器人动力学模型及其线性化阻抗控制模型

机器人动力学模型 机器人动力学模型描述了机器人的运动与所受力和力矩之间的关系。这个模型考虑了机器人的质量、惯性、关节摩擦、重力等多种因素&#xff0c;用于预测和解释机器人在给定输入下的动态行为。动力学模型是设计机器人控制器的基础&#xff0c;它可以帮助我们理解…

element-plus的文件上传组件el-upload

el-upload组件 支持多种风格&#xff0c;如文件列表&#xff0c;图片&#xff0c;图片卡片&#xff0c;支持多种事件&#xff0c;预览&#xff0c;删除&#xff0c;上传成功&#xff0c;上传中等钩子。 file-list&#xff1a;上传的文件集合&#xff0c;一定要用v-model:file-…

基于B/S模式和Java技术的生鲜交易系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;B/S模式、Java技术 工具&#xff1a;Visual Studio、MySQL数据库开发工具 系统展示 首页 用户注册…

RAG综述汇总

第一篇&#xff1a;Retrieval-Augmented Generation for Large Language Models: A Survey(同济/复旦) 论文链接 1.简介 这篇全面的综述论文详细研究了 RAG 范式的发展&#xff0c;包括 Naive RAG、Advanced RAG 和 Modular RAG。介绍了 RAG 框架的三个基础技术&#xff0c;…

Python28-7.4 独立成分分析ICA分离混合音频

独立成分分析&#xff08;Independent Component Analysis&#xff0c;ICA&#xff09;是一种统计与计算技术&#xff0c;主要用于信号分离&#xff0c;即从多种混合信号中提取出独立的信号源。ICA在处理盲源分离&#xff08;Blind Source Separation&#xff0c;BSS&#xff0…

CANopen协议开发梳理总结笔记教程

0、提醒 CANOpen使用时&#xff0c;需要清楚什么是大端和小端&#xff0c;这对于CANOpen数据发送及解析时&#xff0c;有很大的帮助。且学习开发CANOpen时&#xff0c;需要具备一定的CAN基础。 1、CANOpen协议介绍 ①、什么是CANOpen协议 CANOpen协议是一种架构在控制局域网络…

yaml格式转换成json格式

yaml格式转换成json格式 ①postman生成的结果是yaml格式 ps&#xff1a;postman输出的格式是没有自动换行的&#xff0c;需要将内容换行 ②复制到Python的脚本跑一趟&#xff1a;自动换行并去掉/n&#xff1b; str " "//(postman输出的内容&#xff09; print(st…

【python技巧】parser传入参数

参考网址: https://lightning.ai/docs/pytorch/LTS/api/pytorch_lightning.utilities.argparse.html#pytorch_lightning.utilities.argparse.add_argparse_args 1. 简单传入参数. parse_known_args()方法的作用就是把不在预设属性里的参数也返回,比如下面这个例子, 执行pytho…

2024年信息系统项目管理师1批次上午客观题参考答案及解析(1)

1、新型基础设施建设是以新发展理念为引领&#xff0c;以()为驱动&#xff0c;以信息网络为基础&#xff0c;面向高质量发展需要&#xff0c;提供数字转型、智能升级、融合创新等服务的基础设施体系。 A&#xff0e;技术创新 B&#xff0e;人工智能 C&#xff0e;区块链 D&…

代码随想录算法训练营第二十七天|452. 用最少数量的箭引爆气球、435. 无重叠区间、763.划分字母区间

452. 用最少数量的箭引爆气球 如何使用最少的弓箭呢&#xff1f; 直觉上来看&#xff0c;貌似只射重叠最多的气球&#xff0c;用的弓箭一定最少&#xff0c;那么有没有当前重叠了三个气球&#xff0c;我射两个&#xff0c;留下一个和后面的一起射这样弓箭用的更少的情况呢&am…

STM32-输入捕获IC和编码器接口

本内容基于江协科技STM32视频学习之后整理而得。 文章目录 1. 输入捕获IC1.1 输入捕获IC简介1.2 频率测量1.3 输入捕获通道1.4 主从触发模式1.5 输入捕获基本结构1.6 PWMI基本结构 2. 输入捕获库函数及代码2.1 输入捕获库函数2.2 6-6 输入捕获模式测频率2.2.1 硬件连接2.2.2 硬…