C++封装mysql的基本API

来源:互联网 发布:杭州淘宝诈骗案进展 编辑:程序博客网 时间:2024/06/04 00:29

最近在做数据库的实验,觉得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);}

当然大家可以根据自己的需求进行适当的修改,如果对我写的有啥地方不满,欢迎指教,毕竟我是新手嘛

0 0
原创粉丝点击