[集群聊天服务器]----(五)User类、UserModel类

接着上文[集群聊天服务器]----(四)MySQL数据库模块,接下来我们对User类、UserModel类进行剖析,User表和UserModel类是项目最基本也是最重要的部分,通过它我们对用户的id,用户名,密码,状态相关信息进行存储,也决定了登录成功与否以及后续的聊天等内容。

User表设计

在这里插入图片描述
创建 User 类:

#ifndef USER_H
#define USER_H

#include <string>
using namespace std;

//匹配user表的ORM类
class User {
public:
    User(int id=-1,string name="", string pwd="",string state="offline")
    {
        this->id=id;
        this->name=name;
        this->password=password;
        this->state=state;
    }

    void setId(int id) {this->id=id;}
    void setName(string name) {this->name=name;}
    void setPwd(string password) {this->password=password;}
    void setState(string state) {this->state=state;}

    int getId() {return this->id;}
    string getName() {return this->name;}
    string getPwd() {return this->password;}
    string getState() {return this->state;}

private:
    int id;
    string name;
    string password;
    string state;

};

#endif
  • 由于user的id是填入表格以后,数据库自动创建的,所以初始时赋予-1,并提供了设置/获取id,用户名,用户密码,用户状态的相关函数。

创造UserModel类对User表进行数据操作

成员函数

    //user表的增加方法
    bool insert(User &user);

    //根据用户号码查询用户信息 
    User query(int id);

    //更新用户的状态信息
    bool updateState(User &user);
    
    //重置用户的状态信息
    void resetState();

user表的增加方法

 bool UserModel::insert(User &user)
 {
    //组装sql语句
    char sql[1024] = {0};
    sprintf(sql,"insert into user(name,password,state) values('%s','%s','%s')",
            user.getName().c_str(),user.getPwd().c_str(),user.getState().c_str()); 

    MySQL mysql;

    //连接数据库
    if(mysql.connect()){
        //更新数据库语句
        if(mysql.update(sql)){
            //获取插入成功的用户数据生成的主键id
            user.setId(mysql_insert_id(mysql.getConnection()));
            return true;
        }
    }

    return false;
}
  • 首先组装sql语句;
  • 创建数据库对象,并连接数据库,根据sql语句进行更新user表,其中user为表格名字,user()括号中的为要插入的内容标题,values为对应的值,注意,表格名字以及对应的内容标题一定要和表格对应,否则插入失败
  • 更新成功会生成用户id,调用mysql_insert_id()函数在user中进行设置,(mysql.getConnection()作用是获取mysql的连接

根据用户号码查询用户信息

User UserModel::query(int id)
{
    char sql[1024] = {0};
    sprintf(sql,"select * from user where id =%d",id);

    MySQL mysql;

    //连接数据库
    if(mysql.connect()){
        //更新数据库语句
        MYSQL_RES *res = mysql.query(sql); //指针 内部动态内存开辟 需要释放资源
        if(res != nullptr){
            //获取行 根据主键查
            MYSQL_ROW row = mysql_fetch_row(res);
            if(row != nullptr)
            {
                User user;
                user.setId(atoi(row[0]));
                user.setName(row[1]);
                user.setPwd(row[2]);
                user.setState(row[3]);

                mysql_free_result(res);
                return user;
            }
        }
    }
    return User();
}
  • 组装sql语句,select * from user where id =%d是对user进行查找id;
  • 连接数据库,并根据sql语句调用mysql_use_result()函数(属于MYSQL_RES类型)逐行进行查询,在调用mysql_fetch_row()读取结果;
  • 创建一个User对象,并根据查找结果设置其相应值,返回User对象
  • 注意res为内部动态内存开辟,需要释放资源

更新用户的状态信息

bool UserModel::updateState(User &user)
{
    char sql[1024] = {0};
    sprintf(sql,"update user set state = '%s' where id = %d"
        ,user.getState().c_str(),user.getId()); 

    MySQL mysql;

    //连接数据库
    if(mysql.connect()){
        //更新数据库语句
        if(mysql.update(sql)){
            return true;
        }
    }
    return false;
}

  • 组装sql语句,根据id,更新 user表中的状态;
  • 连接数据库进行更新

重置用户的状态信息

void UserModel::resetState()
{
    char sql[1024] = "update user set state = 'offline' where state = 'online'";
    MySQL mysql;

    //连接数据库
    if(mysql.connect()){
        //更新数据库语句
        mysql.update(sql);
    }

}
  • 组装sql语句,这个函数主要是针对捕捉到服务器ctrl+c异常结束后,重置user的状态信息,将表格中online用户的状态都改为offline;
  • 连接数据库进行更新

好了~ 关于集群聊天服务器中的User类和UserModel类的剖析就到此结束了,接下来我们将进入业务模块正题,用户注册、登录、退出以及客户端异常退出回调函数,下一节见~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据分析【方差分析】四

方差分析的核心 什么是方差分析:方差分析是假设检验的一种延续与扩展,主要用于多个总体均值(三组或三组以上均值)是否相等做出假设检验,研究分类型自变量对数值型因变量的影响。 它的零假设和设备假设分别为: 单因素方差分析的前提条件 独立性 组内独立(随机抽样、…

<string.h>中部分库函数的模拟实现

前言 嗨&#xff0c;我是firdawn&#xff0c;本章将简单介绍&#xff0c;<string.h>中部分库函数的模拟实现&#xff0c;如strncpy&#xff0c;strncat&#xff0c;memcpy&#xff0c;memmove。在本文片末&#xff0c;还讲简单介绍判断机器大小端的函数实现&#xff0c;…

【Linux】LAMP集群分布式安全方案

LAMP集群分布式安全方案主要涉及确保Linux、Apache、MySQL和PHP&#xff08;LAMP&#xff09;组合构成的集群环境的安全性和稳定性。 本次实验通过网络层安全对防火墙配置&#xff1a;使用防火墙&#xff08;如iptables或firewalld&#xff09;来限制对集群的访问&#xff0c;只…

设计模式在芯片验证中的应用——单例

一、单例模式 单例模式(Singleton)是一种创建型设计模式&#xff0c;能够保证一个类只有一个实例&#xff0c; 并提供一个访问该实例的全局节点。验证环境配置(configuration)类、超时(timeout)处理类等可以使用单例实现。比如说验证环境需要在特定场景中监测特定接口上的超时事…

AI+BI?国内期待值最高的4款智能问答类BI产品测评

AI大模型的这股风终是吹到了数据分析圈。与传统BI相比&#xff0c;问答BI进一步降低了数据获取门槛&#xff0c;通过对话的方式就可以访问数据并得出相应结论&#xff0c;更方便业务人员快速上手分析数据&#xff01; 问答BI&#xff08;Q&A BI&#xff09;在数据分析领域…

【论文笔记】| 定制化生成PuLID

PuLID: Pure and Lightning ID Customization via Contrastive Alignment ByteDance, arXiv:2404.16022v1 Theme: Customized generation 原文链接&#xff1a;https://arxiv.org/pdf/2404.16022 Main Work 提出了 Pure 和 Lightning ID 定制 (PuLID)&#xff0c;这是一种用于…

LaTeX 2022软件安装教程(附软件下载地址)

软件简介&#xff1a; 软件【下载地址】获取方式见文末。注&#xff1a;推荐使用&#xff0c;更贴合此安装方法&#xff01; LaTeX 2022是基于ΤΕΧ的一种排版系统&#xff0c;特别适用于生成科技和数学文档的高质量打印。它可用于各种文档类型&#xff0c;从简单信函到完整…

使用DataGrip连接Elasticsearch

使用DataGrip连接Elasticsearch 前言&#xff0c;公司需要使用ES来做数据的查询&#xff0c;我安装完ES&#xff0c;安装完Kibana的时候&#xff0c;想先开始尝试一下&#xff0c;插入查询数据能否可用&#xff0c;但是上次使用ES是好久前了&#xff0c;增删改查的请求根本记不…

学习Nginx(十四):配置SSL/TLS支持HTTPS

概念 SSL/TLS&#xff1a;安全套接字层&#xff08;SSL&#xff09;及其继任者传输层安全性&#xff08;TLS&#xff09;是为网络通信提供安全及数据完整性的一种安全协议。它们通过在应用程序协议&#xff08;如HTTP&#xff09;与TCP/IP协议族之间提供数据加密封面&#xff…

Three.js 研究:1、如何让物体动起来

1、制作模型动画 2、模型动画在代码中的调用 使用这个例子进行修改&#xff0c;使他能动作webgl_animation_skinning_morph.html 制作好的模型放到如下路径 /three.js-master/examples/models/gltf/无标题.gltf修改加载模型文件的地址 修改动画名称 运行 点击动画后&…

Python TinyDB库:轻量级NoSQL数据库的终极指南

更多Python学习内容&#xff1a;ipengtao.com TinyDB是一个轻量级的NoSQL数据库&#xff0c;适用于需要嵌入式数据库的小型项目。它使用JSON文件存储数据&#xff0c;并提供了简单易用的API&#xff0c;支持多种查询和索引操作。TinyDB非常适合那些不需要复杂数据库功能的小型应…

子比主题ACG美化插件[全开源]

WordPress插件是一种可以扩展和增强WordPress网站功能的应用程序。子比主题ACG美化插件听起来像是一个专门为ACG&#xff08;动画、漫画、游戏&#xff09;爱好者设计的美化插件&#xff0c;它可能包含多种功能来改善网站的外观和用户体验。 内置功能开关100意味着这个插件提供…

【Spring】SpringMVC基本概念

1、介绍 1.1简介 Spring MVC 是 Spring Framework 中的一个模块&#xff0c;它基于 Java 实现了 Web MVC 设计模式&#xff0c;用于构建 Web 应用程序。Spring MVC 提供了清晰的职责划分&#xff0c;使得开发者能够更加简洁和直观地开发 Web 层。 1.2优点 松耦合&#xff1a…

专业的ADAS测试记录仪ETHOS 2

随着ADAS驾驶辅助系统技术的快速发展及日臻成熟&#xff0c;近年来ADAS在全球汽车市场已开始快速普及和商业化&#xff0c;而如何确保ADAS系统的可靠和安全俨然成为汽车领域的重要问题。因此&#xff0c;ADAS驾驶辅助系统的测试也成为了各大整车厂及零部件厂商所关注的焦点。 一…

蓝海卓越计费管理系统 agent_setstate.php SQL注入漏洞复现

0x01 产品简介 蓝海卓越计费管理系统是一套以实现网络运营为基础,增强全局安全为中心,提高管理效率为目的的网络安全运营管理系统,提供“高安全、可运营、易管理”的运营管理体验,基于标准的RADIUS协议开发,它不仅支持PPPOE和WEB认证计费,还支持802.1X接入控制技术,与其…

轻松拿捏C语言——二分查找

&#x1f970;欢迎关注 轻松拿捏C语言系列&#xff0c;来和 小哇 一起进步&#xff01;✊ &#x1f308;感谢大家的阅读、点赞、收藏和关注&#x1f495; 目录&#x1f389; 一、介绍&#x1f308; 二、步骤&#x1f319; 三、代码☀️ 一、介绍 二分查找是一种在有序数组中…

小程序丨公告栏功能,自动弹出提醒

发布查询时&#xff0c;您是否遇到这样的困扰&#xff1a; 1、查询发布时间未到&#xff0c;学生进入查询主页后发现未发布任何查询&#xff0c;不断咨询原因。 2、有些重要事项需要进入查询主页就进行强提醒&#xff0c;确保人人可见&#xff0c;用户需要反馈“我知道了”才…

Day48 Javascript详解

Day48 Javascript详解 文章目录 Day48 Javascript详解一、什么是javascript二、javascript特点三、 Javascript的历史四、Javascript vs Java五、JS的基本数据类型六、JS基本数据类型的特殊点七、数组 一、什么是javascript JavaScript是一种高级的、解释型的编程语言&#xf…

ST-SLAS Technology 实验室自动化与筛查学会技术

文章目录 一、期刊简介二、征稿信息三、期刊表现四、投稿须知五、出版支持 一、期刊简介 SLAS Technology ——SLAS技术强调促进和改进生命科学研发的科学和技术进步;药物递送;诊断;生物医学和分子成像&#xff1b;以及个性化和精准医疗。这包括高通量和其他实验室自动化技术;…

eclipse配置JDK和Tomcat

eclipse配置JDK jdk配置 配置JDK&#xff1a; 首先&#xff0c;确保JDK已经安装并配置了环境变量。这包括设置JAVA_HOME环境变量&#xff0c;指向JDK的安装目录&#xff0c;以及更新CLASSPATH和PATH环境变量以包含JDK的bin目录。 在Eclipse中&#xff0c;通过Window > Pre…