【Qt】10.Linux下,Qt连接云MySQL数据库

news2024/10/8 15:01:36

目录

下载MySQL压缩包

配置MySQL

Qt下编译MySQL

测试

下载MySQL压缩包

网址:

MySQL :: Download MySQL Community Server (Archived Versions)https://downloads.mysql.com/archives/community/

  1. 我为了跟云服务器上的MySQL版本一致,减少不必要的麻烦,所以我选择了8.0.24的版本,其他版本应该也可以。

  2. 系统选择了Linux通用的。

 下载完成后,将压缩包拉进Linux里。

 这里有个问题需要注意,下载的压缩包是xz结尾,所以需要用另一个命令进行解压

tar -xf mysql-8.0.24-linux-glibc2.12-x86_64.tar.xz

配置MySQL

检查是否有mysql用户组和mysql用户,没有就添加,有就忽略。

sudo groups mysql 

  添加用户组和用户。

sudo groupadd mysql && useradd -r -g mysql mysql

 创建数据目录并赋予权限。

sudo mkdir -p /data/mysql
sudo chown mysql:mysql -R /data/mysql

  修改配置文件,如果没有就新建。

sudo vim /etc/my.cnf

修改为下面内容。

[mysqld]
skip-grant-tables	#免密登录,不需要可以删除这行
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
log-error=/data/mysql/mysql.err
pid-file=/data/mysql/mysql.pid
#character config
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true

 重启服务,使配置生效。

sudo service mysql restart

 将解压后的MySQL文件拷贝到/usr/local/mysql

sudo cp -r mysql-8.0.24-linux-glibc2.12-x86_64 /usr/local/mysql

 初始化MySQL

cd /usr/local/mysql/bin/
./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/data/mysql/ --user=mysql --initialize

 查看初始密码。

sudo cat /data/mysql/mysql.err

 执行下面语句,否则在运行MySQL的时候会报错。

sudo ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

 启动MySQL。

sudo cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
sudo service mysql start

 登录MySQL,直接回车进入。

sudo mysql -u root -p

 修改密码。

SET PASSWORD = PASSWORD('123456')

 安装下面依赖库,否则会引起一些不必要的报错。

sudo apt-get install mysql-server
sudo apt-get install qtbase5-private-dev
sudo apt-get install libmysqlclient-dev
sudo apt-get install mysql-client

Qt下编译MySQL

       在Qt的/opt/Qt5.12.9/5.12.9/gcc_64/plugins/sqldrivers/路径下,是缺少libqsqlmysql.so文件的,在最初Qt程序连接MySQL云数据库的时候会发生报错。所以接下来需要通过Qt的qmake编译生成libqsqlmysql.so文件。

       修改mysql.pro文件。

sudo vim mysql.pro

 修改为下面内容。

TARGET = qsqlmysql

HEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp

#QMAKE_USE += mysql

OTHER_FILES += mysql.json

PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)

INCLUDEPATH +=/usr/include/mysql/
LIBS += -L/usr/lib/x86_64-linux-gnu/ -lmysqlclient

第一个地方,使用“#”把整行注释。

第二个地方,INCLUDEPATHmysql.h文件的路径,通过下面命令进行查找。

sudo find / -name mysql.h

 第三个地方, LIBSlibmysqlclient.so文件的路径,通过下面命令进行查找。

sudo find / -name libmysqlclient.so

 修改qsqldriverbase.pri文件。

sudo vim qsqldriverbase.pri

 修改为下面内容。

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

 编译MySQL,需要使用Qt的qmake的绝对路径去编译。

sudo /opt/Qt5.12.9/5.12.9/gcc_64/bin/qmake mysql.pro
sudo make

 最终得到了libqsqlmysql.so文件。

 但是还缺最后一步,将生成的libqsqlmysql.so文件拷贝到/opt/Qt5.12.9/5.12.9/gcc_64/plugins/sqldrivers/下。

sudo cp libqsqlmysql.so /opt/Qt5.12.9/5.12.9/gcc_64/plugins/sqldrivers/

测试

在程序中添加下面代码进行测试。

 

 在xxx.cpp文件中,添加下面头文件。

#include <QSqlDatabase>
#include <QSqlQuery>

 在xxx.cpp文件中,添加下面代码。

QSqlDatabase d = QSqlDatabase::addDatabase("QMYSQL"); //加载mysql驱动,这个字符串是固定的
d.setHostName("xxx.xxx.xxx.xxx");	//云服务器的IP地址
d.setDatabaseName("xxx");        //数据库名称
d.setPort(3306);                     //数据库端口,如果没有更改/etc/mysql/my.cnf就不用改
d.setUserName("root");	//用户名
d.setPassword("xxx");	//密码
if(d.open()){
	qDebug()<<"Hi mysql!连接";
}
else{
	qDebug()<<"失败";
}
qDebug()<<QSqlDatabase::drivers()<<endl;

 结果。

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

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

相关文章

带你手撕排序算法

文章目录前言一、排序的相关概念二、插入排序1.直接插入&#xff08;1&#xff09;算法思想&#xff08;2&#xff09;算法讲解&#xff08;3&#xff09;代码及解析&#xff08;4&#xff09;代码总结2.希尔排序( 缩小增量排序 )&#xff08;1&#xff09;算法思想&#xff08…

maxcomputer的分区表相关操作

– 查看xsxw(学生行为表定义) desc xsxw; – 查看xsxw1(学生行为表定义) desc xsxw1; – 上面的两张表是通过ddl语句创建的分区表 – 创建ddl语句如下 – CREATE TABLE IF NOT EXISTS xsxw1( – xwsj STRING COMMENT ‘行为时间’, – xh STRING COMMENT ‘学号’, – xwdd ST…

基于OptiSystem的LD\LED\EDFA仿真分析

1、客户需求&#xff1a; &#xff08;1&#xff09; 仿真LD、LED直接调制系统的输出光谱&#xff0c;观察系统输出性能。 &#xff08;2&#xff09; 采用EDFA的光纤通信系统&#xff0c;实现对多路光波信号的放大&#xff0c;实现200km、40Gbit/s的传输。用仿真软件搭建一个…

关系数据库——关系代数

文章目录一、传统的集合运算二、专门的关系运算1.选择&#xff08;restriction&#xff09;2.投影&#xff08;Projection&#xff09;3.连接&#xff08;join&#xff09;1&#xff09;等值连接2&#xff09;自然连接4.除&#xff08;Division&#xff09;一、传统的集合运算 …

《深入浅出计算机组成原理》学习笔记 Day17

冒险和预测&#xff08;一&#xff09;1. 结构冒险2. 数据冒险参考1. 结构冒险 结构冒险本质上是一个硬件层面的资源竞争问题&#xff0c;也就是一个硬件电路层面的问题。 CPU 在同一个时钟周期内&#xff0c;同时在运行两条计算机指令的不同阶段&#xff0c;但这两个不同阶段…

Github消息推送到Telegram,并使用Vercel部署

Github buibuibui Telegram 仓库地址&#xff1a;https://github.com/yesmore/gh-buibuibui-tg 借助 Github 的 Webhooks、Vercel’s Serverless API 和 Telegram Bot&#xff0c;连接 Github 和 Telegram&#xff0c;在 Telegram chat 中接收仓库的消息。 效果&#xff1a;你…

深入分析ConcurrentHashMap1.8的扩容实现

什么情况会触发扩容 当往hashMap中成功插入一个key/value节点时&#xff0c;有可能触发扩容动作&#xff1a; 1、如果新增节点之后&#xff0c;所在链表的元素个数达到了阈值 8&#xff0c;则会调用treeifyBin方法把链表转换成红黑树&#xff0c;不过在结构转换之前&#xff0…

做跨境电商日本市场,如何才能让客户满意?

跨境电商作为互联网技术的产物&#xff0c;现如今早就风靡全世界。我国跨境电商行业的发展起步时间比较晚&#xff0c;但在各方力量的加持下&#xff0c;行业的发展日趋完善&#xff0c;行业对国内经济的带动作用也更加明显。当下许多国潮品牌在Starday等跨境电商服务平台的支持…

如何选择研发效能管理平台?好用的研发效能管理平台有哪些

本文将对比介绍8款比较知名的效能度量管理平台&#xff1a;1.PingCode&#xff1b;2.思码逸&#xff1b;3.云效&#xff1b;4.金山云&#xff1b;5.Git&#xff1b;6.Jenkins&#xff1b;7.Bamboo&#xff1b;8.Docker。但在对比研发效能平台之前&#xff0c;我们先来聊一些研发…

Linux驱动开发基础__POLL机制

目录 1 适用场景 2 POLL机制的内核代码详解 2.1 sys_poll 函数 2.2 do_sys_poll 函数 2.3 do_poll函数 3 poll机制使用流程 4 驱动编程 5 应用编程 6 代码 6.1 gpio_key_drv.c 6.2 button_test.c 6.3 Makefile 可以看 字符设备驱动程序之poll机制 那篇文章中的机…

【认证相关】FTA

FTA 测试需要涉及的工作与流程测试大致流程及涉及的工作送测Lab 之前需做的准备工作项目与测试样机基本信息如下信息请填写发给MTK&#xff0c;以便MTK 了解基本的认证项目与产品信息PICS 相关MTK 会提供一份Chip 的default PICS&#xff0c;但是客户还需要自行修改一些项的Val…

分享154个ASP源码,总有一款适合您

ASP源码 分享154个ASP源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c; 154个ASP源码下载链接&#xff1a;https://pan.baidu.com/s/1Jt3X-WAZv-rZswzjwyEtSQ?pwdt46u 提取码&#x…

【C++初阶】七、STL---vector模拟实现

目录 一、模拟实现接口总览 1.1 接口总览 1.2 vector整体框架 1.3 vector成员变量介绍 二、vector模拟实现 2.1 构造函数 2.1.1 无参构造 2.1.2 迭代器区间构造 2.1.3 n个val构造 2.1.4 拷贝构造 2.2 赋值运算符重载 2.2.1 传统写法 2.2.2 现代写法 2.3 析构函数…

蓝桥杯刷题018——和与乘积(贪心)

2021国赛&#xff1a;和与乘积 题目描述 给定一个数列 &#xff0c;问有多少个区间[L,R] 满足区间内元素的乘积等于他们的和&#xff0c;即 输入描述 输入第一行包含一个整数 n&#xff0c;表示数列的长度。 第二行包含 n 个整数&#xff0c;依次表示数列中的数 a1​,a2​,⋯,a…

【Vue】模板语法——文本插值

一、模板语法什么是模板语法Vue 使用一种基于 HTML 的模板语法&#xff0c;使我们能够声明式地将其组件实例的数据绑定到呈现的 DOM 上。所有的 Vue 模板都是语法层面合法的 HTML&#xff0c;可以被符合规范的浏览器和 HTML 解析器解析。在底层机制中&#xff0c;Vue 会将模板编…

(十四)docker安装nacos

一、简介 操作系统&#xff1a;Linux CentOS 7.3 64位 docker版本&#xff1a;19.03.8 nacos版本&#xff1a;默认拉取最新版本 二、实践 1、拉取镜像 docker pull nacos/nacos-server 2、运行容器 docker run --name nacos -p 8848:8848 \ --privilegedtrue \ --restar…

二、什么是GStreamer

GStreamer是一个用于创建流媒体应用程序的框架。基本的设计来自俄勒冈研究生院的视频管道&#xff0c;还有一些来自DirectShow的想法。 GStreamer的开发框架使编写任何类型的流媒体应用程序成为可能。GStreamer框架旨在使编写处理音频或视频或两者同时处理的应用程序变得容易。…

01_学习springdoc的基本使用

文章目录1 什么是 springdoc ?2 springdoc 基本信息3 maven 依赖4 正文来袭4.1 给 Controller 加注解4.2 给 Model 加注解5 大功告成1 什么是 springdoc ? 网上冲浪&#x1f3c4;&#x1f3fb;‍♂️时&#xff0c;无意间发现 java web 应用程序的在线接口文档&#xff0c;除…

开源大数据分析平台的内容有什么?

在大数据时代&#xff0c;做好数据管理是非常重要的一个步骤。可以给企业做出正确的经营决策&#xff0c;指引新的发展方向。因此&#xff0c;随着数字化时代的到来&#xff0c;很多企业都倾向于寻找适宜的开源大数据分析平台&#xff0c;以此提升企业办公协作效率&#xff0c;…

【184】Win10下Java8调用Python的face_recognition库来实现人脸识别

前言 face_recognition 是一个开源的、人脸识别的Python库。本文讲解了在 Windows 10操作系统上&#xff0c;使用 Java8 来调用 Python 的 face_recognition 库来实现人脸识别。虽然 Java8 有 Jython&#xff0c;但是由于截至发文时 Jython 支持的版本太老&#xff08;只有Pyt…