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

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

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

相关文章

为什么固定尺寸 AdSense 广告依旧会出现并非指定的尺寸广告?

经常在网站上投放谷歌 AdSense广告的站长应该都碰到过&#xff0c;明明投放的是固定尺寸的广告位里旧会出现并非指定尺寸的AdSense 广告&#xff0c;很诡异的感觉。其实这都是因为你的 AdSense 账号广告优化造成的&#xff0c;其中里面就包含了广告尺寸优化&#xff0c;只需要在…

Spring源码十七:Bean实例化入口探索

上一篇Spring源码十六&#xff1a;Bean名称转化我们讨论doGetBean的第一个方法transformedBeanName方法&#xff0c;了解Spring是如何处理特殊的beanName&#xff08;带&符号前缀&#xff09;与Spring的别名机制。今天我们继续往方法下面看&#xff1a; doGetBean 这个方法…

Vue笔记11-Composition API的优势

Options API存在的问题 使用传统Options API中&#xff0c;新增或者修改一个需求&#xff0c;就需要分别在data&#xff0c;methods&#xff0c;computed里修改&#xff0c;而这些选项分布在代码的各个地方&#xff0c;中间还穿插着其他Optional API&#xff0c;如果代码量上来…

JAVA之(方法的重载与重写、this关键字、super关键字)

方法的重载与重写 一、方法的重载与重写1、回顾方法的定义2、重载的概念3、重写 二、this关键字1、何为this方法2、使用方法&#xff08;1&#xff09;在构造方法中指构造器所创建的新对象&#xff08;2&#xff09; 方法中指调用该方法的对象&#xff08;3&#xff09; 在类本…

centos7.9 rpm包安装mysql8.2.0数据库、root设置客户端登录、配置并发、表名大小写敏感、启动重启指令等记录

centos安装mysql8数据库,下载的是rpm-bundle.tar包,这样可以在内网环境离线安装,工作中医院的服务器很多也是内网的,所以这里记录下rpm-bundle.tar包安装的步骤。 lscpu 查看处理器是x86还是arm 下载对应的版本 bundle tar包 ((mysql-8.2.0-1.el7.x86_64.rpm-bundle.tar))…

2023年了,还在手动px转rem吗?

px-to-rem 使用amfe-flexible和postcss-pxtorem在webpack中配置px转rem npm i amfe-flexible -Snpm i postcss-pxtorem -D在main.js中 import flexible from amfe-flexible Vue.use(flexible);index.html中 <meta name"viewport" content"widthdevice-w…

Web3D引擎,three.js堪称扛把子,Babylon.js差点意思。

涉及到Web3D开发&#xff0c;Three.js和Babylon.js是两个备受推崇的引擎。它们都是基于WebGL的开源3D引擎&#xff0c;用于创建交互式的3D图形应用程序&#xff0c;但要细论起来&#xff0c;three.js普及度远超Babylon .js. 一、二者的介绍 Three.js&#xff1a; Three.js 是一…

Socket编程用到的函数TCP UDP实例

最基本的 Socket 模型 参考这次答应我&#xff0c;一举拿下 I/O 多路复用&#xff01; (qq.com) Socket编程详解-CSDN博客 Socket是一种通信机制&#xff0c;通过它可以在不同主机之间进行数据交换。在Socket编程中&#xff0c;有两种常见的通信模式&#xff1a;客户端-服务…

PIP换源的全面指南

##概述 在Python的世界里&#xff0c;pip是不可或缺的包管理工具&#xff0c;它帮助开发者安装和管理Python软件包。然而&#xff0c;由于网络条件或服务器位置等因素&#xff0c;直接使用默认的pip源有时会遇到下载速度慢或者连接不稳定的问题。这时&#xff0c;更换pip源到一…

在Linux操作系统中去修复/etc/fstab文件引起的系统故障。

如果/etcfstab文件中发生错误&#xff0c;有可能导致系统无法正常启动。 比如&#xff1a;系统里的一块磁盘被删除&#xff0c;但是/etc/fstab中关于这块磁盘的信息依然被保存在文件/etc/fstab中。 主要看倒数后两行&#xff0c;系统提示&#xff0c;敲ctrlD或者是直接输入密码…

Linux muduo 网络库

主要记录示意图和知识点框架&#xff1a; 1、阻塞、非阻塞、同步、异步 在处理IO的时候&#xff0c;阻塞和非阻塞都是同步IO&#xff0c;只有使用了特殊的API才是异步IO。 2、五种IO模型&#xff1a; 阻塞、非阻塞、IO复用、信号驱动、异步IO 3、muduo网络库 muduo网络库给用…

【Java】垃圾回收学习笔记(一):Root Search 根可达算法+垃圾回收的起点

文章目录 1. 引用计数法优点缺点 2. 可达性分析 Root Search2.1 那些对象是GC Roots2.2 引用的分类2.3 回收方法区 3. 实现细节3.1 GC的起点&#xff1a;节点枚举OopMap&#xff1a;帮助高效的根节点枚举 3.2 何时开始GC&#xff1a;安全点与安全区域如何选取安全点如何让程序进…

rocketmq-console可视化界面功能说明

rocketmq-console可视化界面功能说明 登录界面OPS(运维)Dashboard(驾驶舱)Cluster(集群)Topic(主题)Consumer(消费者)Producer(生产者)Message(消息)MessageTrace(消息轨迹) rocketmq-console是rocketmq的一款可视化工具&#xff0c;提供了mq的使用详情等功能。 本章针对于rock…

玫瑰千层烤饼:味蕾的芬芳盛宴

在美食的缤纷世界里&#xff0c;有一种独特的存在&#xff0c;它融合了玫瑰的芬芳与烤饼的酥脆&#xff0c;那便是令人陶醉的甘肃美食玫瑰千层烤饼。食家巷玫瑰千层烤饼&#xff0c;宛如一件精心雕琢的艺术品。每一层薄如纸张的面皮&#xff0c;都承载着制作者的细腻与用心。层…

【qt】TCP 服务端怎么收到信息?

上一节,我已经讲了,TCP的监听,是基于上一节的,不知道的可以看看. 当我们的TCP 服务器 有 客户端请求连接的时候,会发出一个信号newConnection(). 在TCP服务端与客户端的通信中,我们需要使用到套接字 QTcpSocket类. 套接字相当于是网络通信的接口,服务段和客户端都要通过它进行通…

Gitlab Fork Workflow(协作工作流)

Gitlab Fork WorkFlow&#xff08;协作工作流&#xff09; Fork WorkFlow用于团队间的协作开发。在开发过程中&#xff0c;我们都需要将最新修改的代码合并到代码库上&#xff0c;在代码合并之前&#xff0c;为了保证代码符合上传要求&#xff08;符合需求、代码规范等&#xf…

如何在应用运行时定期监控内存使用情况

如何在应用运行时定期监控内存使用情况 在 iOS 应用开发中&#xff0c;实时监控内存使用情况对于优化性能和排查内存泄漏等问题非常重要。本文将介绍如何在应用运行时定期监控内存使用情况&#xff0c;使用 Swift 编写代码并结合必要的工具和库。 1. 创建桥接头文件 首先&…

vue学习笔记之组件传值

说起组件传值&#xff0c;首先要介绍再vue中什么是组件。 组件&#xff08;Component&#xff09;&#xff0c;是vue中很强大的一个功能&#xff0c;可以将一些可重用的代码进行重用。所有的vue组件同时也是vue实例&#xff0c;可以接受使用相同的选项对象和提供相同的生命周期…

集合复习(java)

文章目录 Collection 接口Collection结构图Collection接口中的方法Iterator 与 Iterable 接口Collection集合遍历方式迭代器遍历增强 for 遍历 List&#xff08;线性表&#xff09;List特有方法ArrayList&#xff08;可变数组&#xff09;ArrayList 底层原理ArrayList 底层原理…

JAVA集合框架、CAS、AQS

目录 一、java 的集合框架有哪些? 二、说-下 ArrayList 和 LinkedList? 三、HashSet和TreeSet的区别? 四、HashMap 的数据结构是什么? 五、CAS机制 六、AQS理解 一、java 的集合框架有哪些? Collection 是 Java 集合框架中的一个根接口&#xff0c;位于 java.util 包中。它…