数据库指的是管理数据的软件,而不是存储数据的仓库。
当然我们Linux环境下使用MySQL数据库还需要安装对应的库文件(sudo apt-get install libmysqlclient-dev),使用到数据库的相关函数声明都放在了
封装参考b站学习视频:点击跳转
mysql.h文件实现
#ifndef MYSQL_H
#define MYSQL_H
#include
#include
using namespace std;
class Mysql
{
public:
//初始化mysql结构体
Mysql();
//删除释放mysql资源
~Mysql();
//连接mysql服务器
bool connect(string ip,string user,string pass,string db,unsigned int port=3306);
//更新信息
bool update(string cmd);
//查询信息
bool query(string cmd);
//遍历下一行信息
bool next(void);
//获取一行中第N个数据的值
string value(int index);
//设置不可自动提交
bool setAutoCommit(bool flag);
//提交事物
bool commit(void);
//回滚
bool rollback(void);
//列数目
int field_count(void);
private:
//释放存储的二维数组内存
void free_result(void);
MYSQL* m_sql; //mysql句柄
MYSQL_RES* m_res; //存放result
MYSQL_ROW m_row; //存放一行的数据
};
#endif//MYSQL_H
mysql.c文件实现
#include "Mysql.h"
//初始化mysql结构体
Mysql::Mysql()
{
m_sql = mysql_init(m_sql);
mysql_set_character_set(m_sql,"utf8");
mysql_autocommit(m_sql,false);
}
//删除释放mysql资源
Mysql::~Mysql()
{
free_result();
if(NULL != m_sql)
{
mysql_close(m_sql);
}
}
//连接mysql服务器
bool Mysql::connect(string ip,string user,string pass,string db,unsigned int port)
{
MYSQL *ptr = mysql_real_connect(m_sql,ip.c_str(),user.c_str(),pass.c_str(),db.c_str(),port,NULL,0);
return ptr!=nullptr;
}
//更新信息
bool Mysql::update(string cmd)
{
return 0 == mysql_real_query(m_sql,cmd.c_str(),cmd.size());
}
//查询信息
bool Mysql::query(string cmd)
{
free_result();
if(mysql_real_query(m_sql,cmd.c_str(),cmd.size()))
{
return false;
}
m_res = mysql_store_result(m_sql);
return true;
}
//遍历下一行信息
bool Mysql::next(void)
{
if(nullptr != m_res)
{
m_row = mysql_fetch_row(m_res);
}
return m_row!=nullptr;
}
//获取一行中第N个数据的值
string Mysql::value(int index)
{
int rowcnt = mysql_field_count(m_sql);
if(index<0 || index>=rowcnt)
{
return string();
}
char* val = m_row[index];
unsigned long length = mysql_fetch_lengths(m_res)[index];
return string(val,length);
}
//设置不可自动提交
bool Mysql::setAutoCommit(bool flag)
{
return mysql_autocommit(m_sql,flag);
}
//提交事物
bool Mysql::commit(void)
{
return mysql_commit(m_sql);
}
//回滚
bool Mysql::rollback(void)
{
return mysql_rollback(m_sql);
}
//得到字段的数量
int Mysql::field_count(void)
{
return mysql_field_count(m_sql);
}
//释放存储数据内存
void Mysql::free_result(void)
{
if(nullptr != m_res)
{
mysql_free_result(m_res);
m_res = nullptr;
}
}