C++项目——集群聊天服务器项目(六)MySQL模块

Hello,大家好啊,最近比较忙,没来得及更新项目,实在抱歉~今天就恢复更新拉~

在验证完网络模块与业务模块代码可以正常使用后,需完成的操作是与底层数据库进行交互,为实现各类用户查询、增删业务奠定良好的基础。本节内容主要完成与底层数据库的交互操作,一起来看看把~

项目流程如下:

1、项目环境搭建 C++项目——集群聊天服务器项目(一)项目介绍、环境搭建、Boost库安装、Muduo库安装、Linux与vscode配置_c++集群聊天服务器-CSDN博客

2、Json第三方库介绍

C++项目——集群聊天服务器项目(二)Json第三方库-CSDN博客

3、muduo网络库介绍

C++项目——集群聊天服务器项目(三)muduo网络库-CSDN博客

4、MySQL数据库创建

C++项目——集群聊天服务器项目(四)MySQL数据库-CSDN博客

5、网络模块与业务模块代码编写

C++项目——集群聊天服务器项目(五)网络模块与业务模块-CSDN博客

一、Mysql环境

在第一节中环境搭建中,有提示大家安装MySQL开发包,可以使用命令

sudo find /usr -name libmysqlclient*

去查看MySQL开发包是否安装好,查询结果如下:

各位这里十分重要哈,这牵扯到后续项目是否能正常登录查询操作底层数据库中存储的数据。

二、MySQL模块编写

2.1 编写MySQL类

在include/server目录下创建文件夹db,表示database数据库,db文件夹下创建头文件db.hpp,负责连接、操作数据库的基本操作

dp.hpp头文件如下:

#ifndef DB_H
#define DB_H#include <mysql/mysql.h>//mysql的头文件 
#include <string>
using namespace std;//数据库操作类
class MySQL
{
public://初始化数据库连接MySQL();//释放数据库连接资源~MySQL();//连接数据库bool connect();//更新操作bool update(string sql);//查询操作MYSQL_RES *query(string sql);//获取连接MYSQL* getConnection();
private:MYSQL *_conn;//连接 
};#endif

相应的,在src/server/中创建文件夹db,db文件夹下创建库文件db.cpp,如图

对创建的MySQL类进行函数实现,db.cpp文件如下

#include "db.hpp"
#include <muduo/base/Logging.h>//数据库配置信息
static string server = "127.0.0.1";
static string user = "root";
static string password = "123456";
static string dbname = "chat";//初始化数据库连接
MySQL::MySQL()
{_conn = mysql_init(nullptr);
}//释放数据库连接资源
MySQL::~MySQL()
{if (_conn != nullptr)mysql_close(_conn);
}//连接数据库
bool MySQL::connect()
{MYSQL *p = mysql_real_connect(_conn, server.c_str(), user.c_str(),password.c_str(), dbname.c_str(), 3306, nullptr, 0);if (p != nullptr){//C和C++代码默认的编码字符是ASCII,如果不设置,从MySQL上拉下来的中文显示?mysql_query(_conn, "set names gbk");LOG_INFO << "connect mysql success!";}else{LOG_INFO << "connect mysql fail!";}return p;
}//更新操作
bool MySQL::update(string sql)
{if (mysql_query(_conn, sql.c_str())){LOG_INFO << __FILE__ << ":" << __LINE__ << ":"<< sql << "更新失败!";return false;}return true;
}//查询操作
MYSQL_RES *MySQL::query(string sql)
{if (mysql_query(_conn, sql.c_str())){LOG_INFO << __FILE__ << ":" << __LINE__ << ":"<< sql << "查询失败!";return nullptr;}return mysql_use_result(_conn);
}//获取连接
MYSQL* MySQL::getConnection()
{return _conn;
}

2.2 更新CMakeLists.txt文件

我们来依次更新一下CMakeLists.txt文件

在chat项目下的CMakeLists.txt文件,将头文件搜索路径更新

src/server中的CMakeLists.txt添加mysqlclient库文件,添加db目录中所有文件一起生成可执行文件

三、模块测试

此处只要使用CMake编译成功即可!

如果有问题,还请及时联系我,感谢大家的批评与指正!谢谢~

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

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

相关文章

【笔记】Android U RILJ 中与运营商名称SPN显示相关的日志分析

源码阅读&#xff1a;AOSPXRef 常用日志关键字 Note&#xff1a;">"下发MD&#xff0c;"<"MD上报&#xff0c;[]中的id有请求和返回的对应关系 KEYComment> OPERATOR下发MD&#xff0c;请求运营商信息< OPERATORMD上报运营商注册信息> DA…

Java--队列

无界队列 public class Task implements Runnable, Comparable<Task>{private int priority; // 优先级别public Task(int priority) {this.priority priority;}// 当前对象和其他对象作比较, 当前优先级大就返回-1, 优先级小就返回1, 值越小, 优先级越高.Overridepubl…

【群晖】白群晖如何公网访问

【群晖】白群晖如何公网访问 ——> 点击查看原文 在使用默认配置搭建好的群晖NAS后&#xff0c;我们可以通过内网访问所有的服务。但是&#xff0c;当我们出差或者不在家的时候也想要使用应该怎么办呢&#xff1f; 目前白群提供了两种比较快捷的方式&#xff0c;一种是直接注…

【Python系列】合并配置文件的最佳实践

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

python实现两个Excel表格数据对比、补充、交叉验证

业务背景 业务中需要用到类似企查查一类的数据平台进行数据导出&#xff0c;但企查查数据不一定精准&#xff0c;所以想采用另一个官方数据平台进行数据对比核验&#xff0c;企查查数据缺少的则补充&#xff0c;数据一致的保留企查查数据&#xff0c;不一致的进行颜色标注。 …

脱壳之常用的加固样本特征

梆梆加固样本特征 清单文件入口 android:name“com.SecShell.SecShell.ApplicationWrapper” 特征 免费版 meta-data meta-data总结 assets/secData0.jar lib/armeabi/libSecShell.so lib/armeabi/libSecShell-x86.so 梆梆企业版 assets/classes0.jar lib/armeabi-v7a/libD…

第一次运行 Python 项目,使用 python-pptx 提取 ppt 中的文字和图片

人工智能时代&#xff0c;最需要学习的编程语言是&#xff1a;python 。笔者是个 python 小白&#xff0c;昨天花了两个小时&#xff0c;第一次成功运行起来 python 项目 。 项目是 powerpoint-extractor &#xff0c;可以将 ppt 文件中的图片提取出来&#xff0c;并输出到固定…

Date的Invalid Date

使用Date()构造日期对象&#xff0c;如果传入非日期格式或者错误的日期格式的字符串&#xff0c;仍然能构造出Date对象。 var date new Date("dream"); console.log(date:, date); //Invalid Date console.log(date:, typeof date); //“object” console.log(da…

js 拼接HTML时 onclick方法和传参报错[onject Object] 和 unexpected end of input`

Vue js拼接onclick事件 1.onclick 方法函数找不到2.方法中传参2.1 int 类型传参&#xff08;直接传参&#xff09;2.2 字符串类型&#xff08;需要加引号&#xff09;2.3 对象&#xff08;对象是不能直接拼接的。拼接的必须是字符串。因此需要将对象转成字符串。&#xff09; 1…

全量知识系统 之“程序”详细设计 之 “絮”---开端“元素周期表”表示的一个“打地鼠”游戏

全量知识系统 之“程序”详细设计 概述-概要和纪要 序 絮&#xff08;一个极简的开场白--“全量知识系统”自我介绍&#xff09; 将整个“人生”的三个阶段 比作“幼稚园”三班 &#xff1a; 第一步【想】-- “感性”思维游戏&#xff1a;打地鼠 。学前教育-新生期&#x…

js的Number对象和全局对象

文章目录 1. Number 对象1.1. 含义1.2. 属性1.3. 方法 2. 全局对象2.1. 含义2.2. 特点2.3. 属性2.4. 方法 3. 函数的本质 1. Number 对象 1.1. 含义 Number 对象是原始数值的包装对象。 const num 2.334; const obj new Number(num); console.log(obj); //Number console.…

Windows安装tomcat,以服务的方式管理,如何设置虚拟内存

之前工作中&#xff0c;部署tomcat都是使用Linux服务器&#xff0c;最近遇到个客户&#xff0c;提供的服务器是Windows server&#xff0c;并且需要通过服务的方式管理tomcat&#xff1b;以自己多年的码农经验&#xff0c;感觉应该没有问题&#xff0c;结果啪啪打脸了&#xf…

双向BFS

P1032 [NOIP2002 提高组] 字串变换 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 方法学自于B19 双向BFS 字串变换_哔哩哔哩_bilibili #include<iostream> #include<algorithm> #include<cstdio> #include<queue> #include<map> using namesp…

Adaboost集成学习 | Matlab实现基于BiLSTM-Adaboost双向长短期记忆神经网络结合Adaboost集成学习时间序列预测(股票价格预测)

目录 效果一览基本介绍模型设计程序设计参考资料效果一览 基本介绍 Matlab实现基于BiLSTM-Adaboost双向长短期记忆神经网络结合Adaboost集成学习时间序列预测(股票价格预测) 模型设计 股票价格预测是一个具有挑战性的时间序列预测问题,可以使用深度学习模型如双向长短期记忆…

python爬虫之selenium4使用(万字讲解)

文章目录 一、前言二、selenium的介绍1、优点&#xff1a;2、缺点&#xff1a; 三、selenium环境搭建1、安装python模块2、selenium4新特性3、安装驱动WebDriver驱动选择驱动安装和测试 基础操作1、属性和方法2、单个元素定位通过id定位通过class_name定位一个元素通过xpath定位…

【P1098】[NOIP2007 提高组] 字符串的展开

[NOIP2007 提高组] 字符串的展开 题目描述 在初赛普及组的“阅读程序写结果”的问题中&#xff0c;我们曾给出一个字符串展开的例子&#xff1a;如果在输入的字符串中&#xff0c;含有类似于 d-h 或者 4-8 的字串&#xff0c;我们就把它当作一种简写&#xff0c;输出时&#…

uView对比1.X

uView2.0与uView1.x之间&#xff0c;是有非常大差异的&#xff0c;1.x不能升级到2.x版本。 造成这个问题的根本原因是&#xff0c;2.x是一个重构版本&#xff0c;对1.x进行了整个架构的改造升级&#xff0c;摒弃了1.x中一些不合理的理念和做法&#xff0c;同时引入很多优秀的新…

飞书裁员提供补偿方案或者转岗机会

近期&#xff0c;飞书CEO谢欣发布了一封全员信&#xff0c;宣布公司将进行新一轮的组织调整&#xff0c;其中包括适当精简团队规模。这一决定是为了解决组织自身存在的问题&#xff0c;如团队规模较大但组织不够精干&#xff0c;效率降低&#xff0c;以及力量不够聚焦&#xff…

【OJ】动归练习五之子组串

个人主页 &#xff1a; zxctscl 如有转载请先通知 题目 1. 53. 最大子数组和1.1 分析1.2 代码 2. 918. 环形子数组的最大和2.1 分析2.2 代码 3. 152. 乘积最大子数组3.1 分析3.2 代码 4. 1567. 乘积为正数的最长子数组长度4.1 分析4.2 代码 1. 53. 最大子数组和 1.1 分析 一、…

密码学基础-对称密码/公钥密码/混合密码系统 详解

密码学基础-对称密码/公钥密码 加解密说明1.加密解密必要因素加密安全性说明 什么是对称密码图示说明对称密码详解什么是DES?举例说明 什么是3DES什么是AES? 公钥密码什么是RSA? 对称密钥和公钥密码优缺点对比对称密码对称密码算法总结对称密码存在的问题? 公钥密码公钥密码…