C++封装mysql的基本API

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

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

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以给你讲一下使用ODBC函数封装MySQL数据库的方法。 1. 安装和配置MySQL ODBC驱动程序和ODBC数据源。你需要先到MySQL官网上下载和安装MySQL ODBC驱动程序,然后在ODBC数据源管理器中配置好ODBC数据源,包括设置数据源名称、服务器地址、端口号、数据库名称、用户名和密码等。 2. 在代码中使用ODBC API连接到MySQL数据库。你可以使用以下代码连接到MySQL数据库: ```c++ #include <windows.h> #include <sql.h> #include <sqlext.h> SQLHENV henv; SQLHDBC hdbc; SQLHSTMT hstmt; SQLRETURN retcode; SQLCHAR *dsn = (SQLCHAR*)"your_dsn_name"; SQLCHAR *uid = (SQLCHAR*)"your_username"; SQLCHAR *pwd = (SQLCHAR*)"your_password"; retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER); retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); retcode = SQLConnect(hdbc, dsn, SQL_NTS, uid, SQL_NTS, pwd, SQL_NTS); ``` 3. 执行SQL语句。你可以使用以下代码执行SQL语句: ```c++ SQLCHAR *sql = (SQLCHAR*)"select * from your_table"; retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); retcode = SQLExecDirect(hstmt, sql, SQL_NTS); ``` 4. 处理查询结果。你可以使用以下代码处理查询结果: ```c++ SQLCHAR name[256]; SQLINTEGER age; while (SQLFetch(hstmt) == SQL_SUCCESS) { SQLGetData(hstmt, 1, SQL_C_CHAR, name, 256, NULL); SQLGetData(hstmt, 2, SQL_C_LONG, &age, 0, NULL); printf("Name: %s, Age: %d\n", name, age); } ``` 5. 断开与MySQL数据库的连接。你可以使用以下代码断开与MySQL数据库的连接: ```c++ retcode = SQLDisconnect(hdbc); SQLFreeHandle(SQL_HANDLE_DBC, hdbc); SQLFreeHandle(SQL_HANDLE_ENV, henv); ``` 需要注意的是,在使用ODBC函数封装MySQL数据库的过程中,你需要熟悉ODBC函数的使用方法和MySQL数据库的相关知识。此外,你需要注意代码的安全性和可靠性,例如防止SQL注入等问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值