聊天服务器(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);
}
添加一条数据,注册业务