Mysql类的封装

Mysql类的封装

1. 数据库简介

数据库指的是管理数据的软件,而不是存储数据的仓库。

1.1 为什么我们需要使用到数据库?

  1. 计算机的资源是有限的,不可能把所有的数据存储在内存中,并且内存掉电后数据会丢失
  2. 为了让数据在程序关闭重启后还继续使用,必须把数据存储到磁盘的文件中
  3. 随着程序的功能越来越复杂、数据越来越多,从文件中读取数据需要大量的重复性操作
    ,从文件中读取指定的数据需要复杂的逻辑
  4. 不同的程序它的数据不同、访问数据文件的操作也有所不同,意味着读写文件的代码不能复用
  5. 所以程序员非常需要一个统一的、快速的访问磁盘数据的工具
  6. 使用数据库时,程序员不需要自己管理数据,而是通过数据库提供统一的接口进行读写数据即可,至于数据在数据库文件中如何保存、查找、修改等与程序员无关

1.2 常用的数据库分类

  • 商用型:OceanBase、Oracle、DB2、SQL Server
  • 开源型:MySQL、mariaDB、PostgreSQL
  • 桌面型:以微软的Access为代表,可以通过界面操作数据
  • 嵌入式:以SQLLite为代表,适合嵌入式设备使用的小型数据库

2. Mysql数据库功能封装

当然我们Linux环境下使用MySQL数据库还需要安装对应的库文件(sudo apt-get install libmysqlclient-dev),使用到数据库的相关函数声明都放在了<mysql/mysql.h>头文件中。

封装参考b站学习视频:点击跳转

mysql.h文件实现

#ifndef MYSQL_H
#define MYSQL_H

#include <mysql/mysql.h>
#include <string>
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;
	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于Python MySQL封装,可以使用第三方库来实现。一个常用的库是`pymysql`,它提供了Python与MySQL数据库的交互功能。以下是一个简单的MySQL封装的示例代码: ```python import pymysql class MySQLWrapper: def __init__(self, host, user, password, database): self.host = host self.user = user self.password = password self.database = database self.connection = pymysql.connect(host=self.host, user=self.user, password=self.password, database=self.database) self.cursor = self.connection.cursor() def execute_query(self, query): self.cursor.execute(query) result = self.cursor.fetchall() return result def execute_update(self, query): self.cursor.execute(query) self.connection.commit() def close(self): self.cursor.close() self.connection.close() ``` 在这个示例中,`MySQLWrapper`封装了与MySQL数据库的连接和查询操作。它的构造函数接受数据库的主机名、用户名、密码和数据库名作为参数,并创建了一个数据库连接和游标对象。`execute_query`方法用于执行查询操作并返回结果,`execute_update`方法用于执行更新操作(例如插入、更新或删除数据),`close`方法用于关闭数据库连接。 要使用这个封装,你需要先安装`pymysql`库,可以使用以下命令进行安装: ``` pip install pymysql ``` 然后,你可以实例化`MySQLWrapper`,并调用其中的方法来执行相应的数据库操作。在使用完毕后,记得调用`close`方法关闭数据库连接。 这只是一个简单的示例,实际上,你可以根据需要扩展这个封装,添加更多的功能和方法来满足不同的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值