最近在做数据库的实验,觉得c语言提供的关于mysql的API用起来好麻烦,于是就用C++进行了简单的封装,同时也算对mysql的基本API的一个学习吧
代码如下
SQL类的定义
#pragma once
#include<string>
#include<mysql/mysql.h>
class Sql
{
public:
//构造函数用来初始化mysql和连接数据库
Sql(std::string iP,std::string name,std::string passwd,std::string database);
//析构函数用来做数据库的善后处理
~Sql();
//对数据库进行查询操作
bool select(const std::string &operation);
//查询操作完就释放结果集
bool selectOnce(const std::string &operation);
//对数据库进行插入操作
bool insert(const std::string &operation);
//对数据库进行跟新操作
bool update(const std::string &operation);
//获取行
MYSQL_ROW getRow(void);
//获取列数
int getColNum(void);
//获得field数量
int getFieldNum(void);
//打印获得的操作结果
void print_result(void);
//释放保存在该连接的操作结果集
void freeResult(void);
private:
std::string server_ip; //数据库地址
std::string user_name; //用户名
std::string password; //用户密码
std::string database_name; //数据库名
private:
MYSQL *mysql_conn;
MYSQL_RES *mysql_res;
MYSQL_ROW mysql_row;
};
SQL类的实现
#include <iostream>
#include <string>
#include <mysql/mysql.h>
#include "mysql.h"
#include <stdio.h>
//构造函数
Sql::Sql(const std::string ip,const std::string name,const std::string passwd,const std::string database)
{
//初始化自定义变量
server_ip = ip;
user_name = name;
password = passwd;
database_name = database;
//初始化mysql
mysql_conn = mysql_init(NULL);
//连接mysql
if(!mysql_real_connect(mysql_conn,server_ip.c_str(),user_name.c_str(),password.c_str(),database_name.c_str(),0,NULL,0))
{
exit(1);
}
else
{
;
}
}
//操作函数
bool Sql::select(const std::string &operation)
{
if(mysql_query(mysql_conn,operation.c_str()))
{
std::cout<<"mysql操作有误,请确认后重试\n"<<std::endl;
return false;
}
//将查询结果存储在结果集
mysql_res = mysql_use_result(mysql_conn);
if(getRow() == NULL)
{
return false;
}
return true;
}
//操作完就释放结果集
bool Sql::selectOnce(const std::string &operation)
{
if(mysql_query(mysql_conn,operation.c_str()))
{
std::cout<<"mysql操作有误,请确认后重试\n"<<std::endl;
return false;
}
//将查询操作结果存储在结果集
mysql_res = mysql_use_result(mysql_conn);
if(getRow() == NULL)
{
return false;
}
freeResult();
return true;
}
//对数据库进行插入操作
bool Sql::insert(const std::string &operation)
{
if(mysql_query(mysql_conn,operation.c_str()))
{
printf("数据库插入操作失败\n");
return false;
}
return true;
}
//对数据库进行跟新操作
bool Sql::update(const std::string &operation)
{
if(mysql_query(mysql_conn,operation.c_str()))
{
printf("跟新失败\n");
return false;
}
return true;
}
//释放保存在该连接的操作结果集
void Sql::freeResult(void)
{
mysql_free_result(mysql_res);
}
//获得field的数量
int Sql::getFieldNum(void)
{
return ::mysql_field_count(mysql_conn);
}
MYSQL_ROW Sql::getRow(void)
{
return mysql_fetch_row(mysql_res);
}
//获取结果集的列数
int Sql::getColNum(void)
{
return mysql_num_fields(mysql_res);
}
//打印操作结果
void Sql::print_result(void)
{
//获得每行的字段数
int num = mysql_num_fields(mysql_res);
//循环读取所有行
while((mysql_row = mysql_fetch_row(mysql_res)) != NULL)
{
//将每行字段都读出来
for(int i = 0; i < num; i++)
{
std::cout<<mysql_row[i]<<" ";
}
std::cout<<std::endl;
}
}
Sql::~Sql()
{
//关闭mysql连接
mysql_close(mysql_conn);
}
当然大家可以根据自己的需求进行适当的修改,如果对我写的有啥地方不满,欢迎指教,毕竟我是新手嘛