集群聊天服务器项目【C++】(六)MySql数据库

ops/2024/9/24 21:38:51/

前面已经介绍了网络模块和业务模块,本章介绍数据模块,同样保持模块解耦的特性,即业务模块不能出现数据模块内容,如出现SQL语句,接下来看看怎么实现的。

1.环境安装

第一章已经介绍了MySql安装,但注意需要安装MySql开发包,如果没安装则不能调用MySqlAPI,可以使用以下命令检查:

sudo find /usr -name libmysqlclient*

查询结果如下:
在这里插入图片描述

2.数据模块代码

在include/server创建db文件夹,再在改文件下创建db.h头文件,用来链接、操作(增删改查)数据库

#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;//和mysql的一条连接 
};#endif

在src/server/创建db文件夹,在改文件夹下创建db.cpp,代码作用卸载注释了。

#include "db.h"
#include <muduo/base/Logging.h>  //使用了muduo的日志打印代码// 数据库配置信息
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!";  //muduo日志打印}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;
}

其中更新和查询都使用mysql_query()函数,区别在于返回值。

3.更新各目录下CMakeLists.txt内容

项目目录下的CMakeLists.txt更新为:

cmake_minimum_required(VERSION 3.0)
project(chat)# 配置编译选项
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -g)# 配置最终的可执行文件输出的路径
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)# 配置头文件的搜索路径
include_directories(${PROJECT_SOURCE_DIR}/include)
include_directories(${PROJECT_SOURCE_DIR}/include/server)
include_directories(${PROJECT_SOURCE_DIR}/include/server/db) //新添db加头文件路径
include_directories(${PROJECT_SOURCE_DIR}/thirdparty)# 加载子目录
add_subdirectory(src)

src/server/CMakeLists.txt更新为:

# 定义了一个SRC_LIST变量,包含了该目录下所有的源文件
aux_source_directory(. SRC_LIST)
aux_source_directory(./db DB_LIST)  //添加db的源文件# 指定生成可执行文件
add_executable(ChatServer ${SRC_LIST} ${DB_LIST}) //添加db的源文件
# 指定可执行文件链接时需要依赖的库文件
target_link_libraries(ChatServer muduo_net muduo_base mysqlclient hiredis pthread) //添加mysqlclient库文件

总结

本章比较简单,编写了数据模块代码,并更新了相关的CMakeLists.txt文件。


http://www.ppmy.cn/ops/115477.html

相关文章

ES 索引或索引模板

文章目录 1.索引模板是什么2.索引模板查询3.索引模板中条目数4.索引模板删数据5.尝试刷新索引6.索引模板删数据7.查询索引字段类型8.创建索引模板 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 1.索引模板是什么 当需要为同一类索引应用相同的配置、…

chatGPT问答知识合集【二】

Redis 架构说明 Redis 是一个开源的内存数据库&#xff0c;它也可以持久化到磁盘。以下是 Redis 的典型架构说明&#xff1a;### Redis 架构组件&#xff1a;1. **客户端**&#xff1a;与 Redis 服务器进行通信的应用程序或客户端库。2. **Redis 服务器**&#xff1a;执行实际…

构建高可用和高防御力的云服务架构第五部分:PolarDB(5/5)

引言 云计算与数据库服务 云计算作为一种革命性的技术&#xff0c;已经深刻改变了信息技术行业的面貌。它通过提供按需分配的计算资源&#xff0c;使得数据存储、处理和分析变得更加灵活和高效。在云计算的众多服务中&#xff0c;数据库服务扮演着核心角色。数据库服务不仅负…

计算机网络17——IM聊天系统——客户端核心处理类框架搭建

目的 拆开客户端和服务端&#xff0c;使用Qt实现客户端&#xff0c;VS实现服务端 Qt创建项目 Qt文件类型 .pro文件&#xff1a;配置文件&#xff0c;决定了哪些文件参与编译&#xff0c;怎样参与编译 .h .cpp .ui&#xff1a;画图文件 Qt编码方式 Qt使用utf-8作为编码方…

Spring Data Rest 远程命令执行命令(CVE-2017-8046)

&#xff08;1&#xff09;访问 http://your-ip:8080/customers/1&#xff0c;然后抓取数据包&#xff0c;使用PATCH请求来修改 PATCH /customers/1 HTTP/1.1 Host: Accept-Encoding: gzip, deflate Accept: */* Accept-Language: en User-Agent: Mozilla/5.0 (compatible; MS…

vue3<script setup>中toref()和torefs()

在 Vue 3 中&#xff0c;特别是与 <script setup> 语法糖结合使用时&#xff0c;toRef 和 toRefs 是两个非常有用的 Composition API 函数&#xff0c;它们用于在 Composition API 中创建响应式引用&#xff0c;这些引用可以保持对原始响应式对象的响应性&#xff0c;同时…

一.python入门

gyp的读研日记&#xff0c;哈哈哈哈&#xff0c;&#x1f642;&#xff0c;从复习python开始&#xff0c; 目录 1.python入门 1.1 Python说明书 1.2 Python具备的功能 1.3 学习前提 1.4 何为Python 1.5 编程语言 2.Python环境搭建 2.1 开发环境概述 2.2 Python的安装与…

第一篇-基础-第三章-SpringBoot基础

3.1-常用注解和SpringBootApplication标注分析 注解与业务逻辑无关,也不是程序本身,但可以对程序做出解释,程序中的类/方法/变量/参数/包等都可以被注解,完成编译检查工作,减少配置,减少重复工作等等。 常用注解 注解 标注位置 功能 Autowired 成员变量 自动注入依赖 B…