聊天服务器(7)数据模块

目录

Mysql数据库代码封装

业务层代码不要直接写数据库,因为业务层和数据层的代码逻辑也想完全区分开。万一不想存储mysql,想存redis的话,就要改动大量业务代码。解耦合就是改起来很方便。

首先需要安装mysql以及libmysqlclient-dev这个开发包

依赖文件加一个

头文件搜索路径加一个

头文件与源文件

cpp 复制代码
#ifndef DB_H
#define DB_H


#include <mysql/mysql.h>
#include <string>
using namespace std;


//数据库操作类
class MySQL
{
public:
    //初始化数据库连接
    MySQL();

    //释放数据库连接资源
    ~MySQL();

    //连接数据库
    bool connect();


    //更新操作
    bool update(string sql);


    //查询操作
    MYSQL_RES* query(string sql);

private:
    MYSQL * _conn;
};

#endif
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++代码默认的编码字符是
        mysql_query(_conn,"set names gbk");
    }
    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);
}

添加一条数据,注册业务

相关推荐
Cyber4K2 分钟前
【Nginx专项】基础入门篇-访问限制及访问控制
linux·运维·服务器·nginx
涛声依旧393163 分钟前
创建新的虚拟主机
linux·服务器·网络
用户69371750013844 分钟前
2026 Android 开发,现在还能入行吗?
android·前端·ai编程
云飞云共享云桌面9 分钟前
制造研发降本新思路:云飞云共享云桌面集群如何将软硬件利用率提升至200%?
运维·服务器·网络·人工智能·3d·制造
爱喝水的鱼丶11 分钟前
SAP-ABAP:深入浅出 SAP AFVC 表:生产订单工序的核心数据仓库
运维·服务器·数据仓库·sap·abap·pp
YBZha17 分钟前
Android Camera2 + OpenGL 竖屏或横屏预览会有“轻微拉伸”
android
走向IT23 分钟前
TS服务器故障码参考表
运维·服务器
mounter62536 分钟前
【深度解析】Device Memory TCP:开启高性能网络传输的“零拷贝”新时代
linux·服务器·网络·网络协议·tcp/ip·kernel·devmem
优化Henry37 分钟前
多载波扇区软件告警协同处理案例:光路闪断与RRU硬件隐患的排查(续篇)
linux·运维·服务器
2301_780789661 小时前
什么是端口?端口攻击如何检测和防御
服务器·人工智能·游戏·架构·零信任