[集群聊天服务器]----(四)MySQL数据库模块

上一节我们对网络模块和业务模块进行了解耦[集群聊天服务器]----(三)ChatService模块,解耦网络模块和业务模块,封装了回调函数。在项目中需要使用mysql数据库进行存储用户重要数据,并进行增删改查操作。,所以这一节我们对mysql的封装使用进行剖析,这里使用db类进行封装。

数据库配置信息

static string server = "127.0.0.1";
static string user = "root";
static string password = "xxxxxx";
static string dbname = "chat";

这里需要改为自己的相关配置,否则连不上数据库

成员变量

MYSQL *_conn;

成员函数

    // 初始化数据库连接MySQL();// 释放数据库连接资源~MySQL();// 连接数据库bool connect();// 更新操作bool update(string sql);// 查询操作MYSQL_RES *query(string sql);//获取连接MYSQL* getConnection();
  • 在构造函数中,调用mysql_init()函数对MYSQL对象_conn进行初始化
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;
}
  • 使用mysql_real_connect()函数,原型为:
MYSQL *mysql_real_connect (MYSQL *mysql,const char *host,const char *user, const char *passwd, const char *db, unsigned int port,const char *unix_socket,unsigned long client_flag);

其中,MYSQL *为mysql_init函数返回的指针;
host为null或 localhost时链接的是本地的计算机;
mysql用户名这里使用root,密码为xxxxxx;
db为数据库名称,当db为空的时候,函数链接到默认数据库,在进行 mysql安装时会存在默认的test数据库,因此此处可以使用test数据库名称;
port端口为3306,
使用 unix连接方式,unix_socket为null时,表明不使用socket或管道机制,最后一个参数经常设置为0
mysql_real_connect()尝试与运行在主机上的MySQL数据库引擎建立连接。在你能够执行需要有效MySQL连接句柄结构的任何其他API函数之前,mysql_real_connect()必须成功完成。如果连接成功,返回MYSQL*连接句柄。如果连接失败,返回NULL,调用mysql_error()函数显示出错信息,或使用mysql_errno()函数获取出错代号。对于成功的连接,返回值与第1个参数的值相同。

  • 更新数据库
bool MySQL::update(string sql)
{if (mysql_query(_conn, sql.c_str())){LOG_INFO << __FILE__ << ":" << __LINE__ << ":"<< sql << "更新失败!";cout<<mysql_errno(_conn)<<endl;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的封装使用就到此结束,这里只是一个简单的使用,需要深入了解的伙伴们还需要查找相关资料进行学习,下一节我们将会对User类、UserModel类进行剖析,下一节见~~

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

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

相关文章

Linux基础入门和帮助-第二篇

马哥教育 Linux SRE 学习笔记 用户登录信息查看命令 whoami: 显示当前登录有效用户 [rootrocky8 ~]$whoami rootwho: 系统当前所有的登录会话 [rootrocky8 ~]$who root pts/0 2024-05-24 12:55 (10.0.0.1)w: 系统当前所有的登录会话及所做的操作 [rootrocky8 ~]…

python对矩阵列进行操作

在Python中&#xff0c;可以使用NumPy库来对矩阵&#xff08;或称为矩阵、数组&#xff09;的列进行各种操作。以下是一些常见的列操作及其示例代码&#xff1a; import pandas as pd# 读取CSV文件 df pd.read_csv(output_file.csv, delimiter )# 对列进行求和 sum_columns …

WordPress 发布了独立的 SQLite 插件

之前 WordPress 在官方的 Performance Lab 插件实现 SQLite 模块&#xff0c;现在重构 SQLite 的实现&#xff0c;并且将其发布成一个独立的插件&#xff1a;SQLite Database Integration。 独立 SQLite 插件 最初的功能模块实现是基于 aaemnnosttv 的 wp-sqlite-db 插件修改实…

用ssh做跳板用周转服务器帮我们加速下载

假设有一台机器A&#xff0c;它从网站B下载东西很慢&#xff0c;但是有一台机器C&#xff0c;它从B下载比较快&#xff0c;它和A之间的速度也比较快&#xff0c;那么就可以在A发指令&#xff0c;通过ssh做跳板从C加速下载网站B的文件。 以下为示例命令&#xff1a; ssh 用户名…

【DevOps】Linux 下安装配置 Apache 服务器:打造你的专属 Web 平台

目录 一、准备工作 二、安装 Apache 三、启动和管理 Apache 四、验证安装 五、配置 Apache 5.1 修改网站根目录 5.2 配置虚拟主机 5.2.1 创建虚拟主机配置文件 5.2.2 创建网站目录 5.2.3 启用虚拟主机 5.2.4 重启 Apache 5.3 配置 HTTPS 5.3.1 安装 SSL 证书 5.3…

使用CyberRT写第一个代码, test ok

简介 计算框架是自动驾驶系统中的重中之重,也是整个系统得以高效稳定运行的基础。为了实时地完成感知、决策和执行,系统需要一系列的模块相互紧密配合,高效地执行任务流。由于各种原因,这些模块可能位于不同进程,也可能位于不同机器。这就要求计算框架中具有灵活的、高性…

谷歌蜘蛛池是什么?

或称为谷歌爬虫池&#xff0c;是一项专门针对谷歌搜索引擎优化&#xff08;SEO&#xff09;的先进技术&#xff0c;这种技术的主要目的是通过建立庞大的网站群体和复杂的链接结构来吸引和维持谷歌的爬虫程序的注意力&#xff0c;其核心是通过这种结构优化&#xff0c;增强特定网…

大学计算机专业三天看完《Python背记手册》全彩版,轻松学会 Python不迷路!

Python作为一门编程语言&#xff0c;Python提供了高效的高级数据结构&#xff0c;还能简单有效地面向对象编程。Python语法和动态类型&#xff0c;以及解释型语言的本质&#xff0c;使它成为多数平台上写脚本和快速开发应用的编程语言&#xff0c;随着版本的不断更新和语言新功…

Java | Leetcode Java题解之第109题有序链表转换二叉搜索树

题目&#xff1a; 题解&#xff1a; class Solution {ListNode globalHead;public TreeNode sortedListToBST(ListNode head) {globalHead head;int length getLength(head);return buildTree(0, length - 1);}public int getLength(ListNode head) {int ret 0;while (head…

20、设计模式之备忘录模式

备忘录模式 备忘录模式&#xff08;Memento Pattern&#xff09;保存一个对象的某个状态&#xff0c;以便在适当的时候恢复对象。备忘录模式属于行为型模式。 介绍 意图&#xff1a; 在不破坏封装性的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在该对象之外保存…

【6】PostgreSQL 循环

PostgreSQL 循环 前言笔记WHILE 循环基本结构简单示例详细示例创建示例函数解释调用示例函数预期输出 FOR 循环Numeric FOR Loop基本结构简单示例详细示例创建示例函数解释调用示例函数预期输出 Reverse Numeric FOR Loop基本格式简单示例详细说明创建函数解释调用函数预期输出…

[C][字符串][字符串常用函数介绍]详细讲解

目录 0.前言1.gets2.strlen3.strcpy4.strncpy5.strcat - (效率低)6.strncat7.strcmp8.strncmp9.strstr10.strtok11.strerror12.perror(相对于strerror可能更好用)13.ctype.h14.memcpy15.memmove16.memcmp17.memset18.atoi 0.前言 本篇主要介绍处理字符和字符串的库函数的使用及…

【C语言】文件的编译链接和预处理

文件的编译链接和预处理 程序的翻译环境和执行环境翻译环境预处理&#xff08;预编译&#xff09;过程编译过程汇编过程链接过程 运行环境 预处理详解预处理符号预处理指令#define#define定义标识符#define定义宏#define替换规则 #与###的使用##的使用 带有副作用的宏参数宏与函…

软考之信息系统管理知识点(1)

信息系统管理知识点 计算机中的CPU主要由运算单元、控制单元、寄存器组和时序电路等组成&#xff1b; 运算单元是对数据进行加工的部件&#xff0c;主要完成算术运算和逻辑运算。控制单元主要是从主存取出指令进行分析&#xff0c;控制其他部件完成指令的功能。寄存器组既可以用…

超详细的前后端实战项目(Spring系列加上vue3)前端篇(二)(一步步实现+源码)

好了&#xff0c;兄弟们&#xff0c;继昨天的项目之后&#xff0c;开始继续敲前端代码&#xff0c;完成前端部分 昨天完成了全局页面的代码&#xff0c;和登录页面的代码&#xff0c;不过昨天的代码还有一些需要补充的&#xff0c;这里添加一下 内容补充&#xff1a;在调用登…

Spring (16)Spring Boot Starter是什么

Spring Boot Starter是Spring Boot的一个核心特性&#xff0c;它提供了一种快速、简便的方式来引入和管理项目依赖。通过Starters&#xff0c;开发者可以轻松地将必要的依赖集成到项目中&#xff0c;无需手动指定每个库的版本。Starters包含了一组自动配置的模板&#xff0c;这…

代码随想录算法训练营第36期DAY38

DAY38 435无重叠区间 昨晚很快就想出来了&#xff0c;今天相当于二刷。 class Solution {public: static bool mycmp(vector<int>&a,vector<int>&b){ return a[1]<b[1]; } int eraseOverlapIntervals(vector<vector<int>&g…

sql查询,直接返回json数组格式

文章目录 数据库查询&#xff0c;并且sql直接返回json格式 数据库查询&#xff0c;并且sql直接返回json格式 SELECTJSON_ARRAYAGG(JSON_OBJECT(groupId, g.id,groupName, g.NAME,groupColor, g.group_color,num, COALESCE(c.num, 0),type, g.type)) AS result FROMxbd_group g…

如何部署一个基本符合ERC20的智能合约

运行genache-cli 运行以下命令genache-cli下载MetaMask浏览器拓展钱包 添加账户 导入账户 输入genache-cli生成其中的密钥 选择【显示测试网络】点击【添加网络】 添加自己本地的网络 选择该测试网络&#xff0c;账号里就会有100RETH 在remix里接通这个测试帐号 …

10.2.k8s的附加组件-Metrics-server组件与hpa资源pod水平伸缩

目录 一、概述 二、安装部署Metrics-Server组件 1.下载Metrics-Server资源清单 2.编辑Metrics-Server的资源清单 3.验证Metrics-Server是否成功安装 4.使用top命令测试是否管用 三、hpa资源实现pod水平伸缩&#xff08;自动扩缩容&#xff09; 1.编写deploy资源清单 2.…