首页 > 编程语言 >C++聊天集群服务器2

C++聊天集群服务器2

时间:2023-11-27 11:36:17浏览次数:33  
标签:string 数据库 mysql nullptr C++ 集群 MySQL 服务器 conn

​ 总体项目结构如下:

image-20231127111644277

一、数据库的封装

​ db.h如图代码量不多

​ db.cpp:

#include "db.h"

#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 << "MySQL更新失败!";
        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;
}

二、用户类的定义

​ user.hpp:

image-20231127111845201

三、User表的操作类

​ 定义与实现:

image-20231127111942418

image-20231127112007002

四、测试注册业务

​ 使用cmake编译完成后,开两个shell一个作为服务器,一个作为客户端测试。测试结果如下:

image-20231127112145817

可以看见数据库连接并更新成功,登录数据库看一下:

image-20231127112252928

​ 可以看见第24条为刚才插入的数据。

标签:string,数据库,mysql,nullptr,C++,集群,MySQL,服务器,conn
From: https://www.cnblogs.com/dwinternet/p/17858901.html

相关文章

  • C++11 后的单例写法
    template<typenameT>classSingleton{public:staticT&getInstance(){staticTt;returnt;}Singleton(constSingleton&)=delete;Singleton&operator=(constSingleton&)=delete;protected:......
  • 服务器托管需要考虑哪些因素
    在选择服务器托管服务时,需要考虑以下几个关键因素:服务商的口碑和服务质量:选择知名或口碑好的服务提供商是十分重要的。服务器托管的位置:考虑到网络延迟和带宽的问题,服务器托管的位置对网站访问速度有直接影响。因此,选择一个离用户群体近的数据中心能够提高网站的访问速度。服务器托......
  • 实验4 现代C++标准库与类模板
    实验任务5TextCoder.hpp源码1#include<iostream>2#include<string>34usingstd::string;56classTextCoder{7private:8stringtext;9voidencoder();10voiddecoder();11public:12TextCod......
  • C++ 服务端与 Java 客户端的简单连接
    记录一下如何用两种语言简单通信,(其实也大差不差的,应该把。。。)//C++服务端#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<unistd.h>#include<iostream>#include<cstring>usingstd::cout;usingstd::endl;usingst......
  • C语言调用C++类成员函数讲解和实例
    原文:https://blog.csdn.net/LxXlc468hW35lZn5/article/details/1257010071、问题成因C语言与C++调用问题原因主要在于C编译器和C++编译器的不同。C是过程式语言,C编译器编译后,函数在符号库中就是函数名,没有其他任何附加信息。而C++是对象式语言,支持函数重载,C++编译器编译后,在符号......
  • 【C与C++的相互调用方法】
    原文:https://blog.csdn.net/qq_43899283/article/details/132343699C与C++的相互调用方法C与C++为什么相互调用的方式不同C++中调用CC中调用C++致谢C与C++为什么相互调用的方式不同  C和C++之间的相互调用方式存在区别,主要是由于C和C++语言本身的设计和特性不同。函数......
  • extern "C":实现C++和C的混合编程
    原文:https://c.biancheng.net/view/8064.html通过《C语言和C++到底有什么关系?》一节的学习,读者已经了解了C++和C语言之间的关系。简单的理解,C++就是在C语言的基础上增加了一些新特性,从大的方面讲,C++不仅支持面向过程编程,还支持面向对象编程和泛型编程;从小的方面讲,C++还......
  • C++U3-第2课-基础排序(二)
    上节课作业讲师视频分享链接:百度云网盘链接:https://pan.baidu.com/s/1PFBLFdX6C-9FhKXWrhDBew?pwd=l8r3提取码:l8r3本节课教学目标 插入排序概念 插入排序的代码和思路分析  插入代码详细解释【题意分析】1.从第一个元素开始,该元素可以认为已经被排序;2.取出下......
  • C++11以及17部分特性
    1//1、并发支持2//1.1、C++11内存模型:3//a.原子性(Atomicity):对于原子类型(std::atomic),其成员函数的操作是原子的,不会被其他线程中断。4//b.可见性(Visibility):对于非原子类型,通过使用互斥量或同步操作来确保共享数据的可见性,即在一个线程中对共享数据的......
  • C++ ini 实现
    首先是从https://github.com/benhoyt/inih取用的ini读取类头文件//fileini.h/*inih--simple.INIfileparserSPDX-License-Identifier:BSD-3-ClauseCopyright(C)2009-2020,BenHoytinihisreleasedundertheNewBSDlicense(seeLICENSE.txt).Gotothe......