当前位置: 首页 > article >正文

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

目录

  • Mysql数据库代码封装
  • 头文件与源文件

Mysql数据库代码封装

业务层代码不要直接写数据库,因为业务层和数据层的代码逻辑也想完全区分开。万一不想存储mysql,想存redis的话,就要改动大量业务代码。解耦合就是改起来很方便。
首先需要安装mysql以及libmysqlclient-dev这个开发包
在这里插入图片描述
依赖文件加一个
在这里插入图片描述
头文件搜索路径加一个
在这里插入图片描述

头文件与源文件

#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
#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);
}



添加一条数据,注册业务
在这里插入图片描述
在这里插入图片描述


http://www.kler.cn/a/400946.html

相关文章:

  • 纯前端实现语音文字互转
  • 海量数据面试题
  • MySQL索引的底层实现原理是什么?
  • ASP.NET Core Webapi 返回数据的三种方式
  • PHP 表单 - 必需字段
  • 在 CentOS 7 上安装 MinIO 的步骤
  • sql server index FORCESEEK
  • 微搭低代码入门05循环
  • 【Redis_Day4】内部编码和单线程模型
  • 汽车资讯新纪元:Spring Boot技术引领
  • 深入解析大带宽服务器:性能优势与选择指南
  • 力扣.259 较小的三数之和
  • Redis 高并发缓存架构实战与性能优化
  • 从零开始仿抖音做一个APP(首页顶部T标签添加页面关联)
  • Android15之解决:Dex checksum does not match for dex:framework.jar问题(二百三十九)
  • ---usb 摄像头的Linux 下查询的命令
  • Go语言教程(一看就会)
  • 高级java每日一道面试题-2024年11月08日-RabbitMQ篇-RabbitMQ有哪些重要的角色?有哪些重要的组件?
  • 用AI来写SQL:让ChatGPT成为你的数据库助手
  • Spring Boot汽车资讯:科技与汽车的新融合
  • Spring Boot开箱即用可插拔实现过程演练与原理剖析
  • 【golang-技巧】-线上死锁问题排查-by pprof
  • React Native 全栈开发实战班 - 原生功能集成之权限管理
  • Qt 和 WPF(Windows Presentation Foundation)
  • 交易效率不打打折扣,遵循昂首平台优化策略
  • SLAM-evo 评估