当前位置:  技术问答>linux和unix

本人对MYSQL C API做的一个封装,希望对linux C++程序员有点帮助,同时欢迎拍砖!

    来源: 互联网  发布时间:2016-02-26

    本文导语:  本人对MYSQL  C API做的一个封装,使用很简单,构造一个对象,就可直接执行SQL,但对于需返回结果的查询语句,对其数据集没做封装,仍需直接调用mysql c api对其进行处理,本人将下次完成,不管如何,欢迎大家...

本人对MYSQL  C API做的一个封装,使用很简单,构造一个对象,就可直接执行SQL,但对于需返回结果的查询语句,对其数据集没做封装,仍需直接调用mysql c api对其进行处理,本人将下次完成,不管如何,欢迎大家多提宝贵的意见!

//CDataBase.h
#ifndef CDATABASE_H
#define CDATABASE_H

#include "stdio.h"
#include "/usr/include/mysql/mysql.h"
#include 

class CDataBase
{
public:
    CDataBase(const char *host, const char *user, const char *passwd, const char *db);

    ~CDataBase();
    bool ExecuteSql(const char* chSql);
    MYSQL_RES * OpenRecordset(const char* chSql);
    void FreeResult(MYSQL_RES *result);
    
private:
    MYSQL mysql;
    bool _bOpen;
    const char *_host;
    const char *_user;
    const char *_passwd;
    const char *_db;

protected:
    bool Open();
    void Close();
    bool GetConState();
};

#endif

------------------------------------------
//CDataBase.cpp

#include "cdatabase.h"

CDataBase::CDataBase(const char *host, const char *user, const char *passwd, const char *db)
{
    _host = host;
    _user = user;
    _passwd = passwd;
    _db = db;

    _bOpen = false;
    Open();
}


CDataBase::~CDataBase()
{
    Close();
}

bool CDataBase::GetConState()
{
    return _bOpen;
}

bool CDataBase::Open()
{
    if( !mysql_init(&mysql) )
    {
        printf("nFailed to initate MySQL connection");
        return false;
    }
    if (!mysql_real_connect(&mysql,_host,_user,_passwd,_db,0,NULL,0))
    {
        printf( "Failed to connect to MySQL: Error: %sn", mysql_error(&mysql));
        return false;
    }
    printf("Logged on to database sucessfullyn");
    _bOpen = true;
    return _bOpen;
}


void CDataBase::Close()
{
    if(_bOpen)
    {
        mysql_close(&mysql);
        _bOpen = false;
    }
}

bool CDataBase::ExecuteSql(const char* chSql)
{
    if(!GetConState())
        return false;
    if(mysql_real_query(&mysql,chSql,strlen(chSql))==0)
        return true;
}


MYSQL_RES * CDataBase::OpenRecordset(const char* chSql)
{
    MYSQL_RES *rs = NULL;
    if(ExecuteSql( chSql ))
    {
        rs = mysql_store_result(&mysql);
    }
    return rs;
}


void CDataBase::FreeResult(MYSQL_RES *result)
{
    if(result)
        mysql_free_result(result);
}

-------------------------------------------------

//Test.cpp


#ifdef HAVE_CONFIG_H
#include 
#endif

#include 
#include 
#include "cdatabase.h"

using namespace std;

int main(int argc, char *argv[])
{
    const char *host = "127.0.0.1";
    const char *user = "root";
    const char *pwd = NULL;
    const char *dbn = "test";
//构造对象
    CDataBase *db = new CDataBase(host,user,pwd,dbn);
    
//创建一个张
    db->ExecuteSql( "create table tt1(id int ,name varchar(20))");
//插入一个数据
    db->ExecuteSql( "insert into tt1(id,name)values('31','abc')");

//查询数据
    MYSQL_RES *res = NULL;
    MYSQL_ROW row;
    
    res = db->OpenRecordset("select * from tt");
    if(res)
    {
        cout 

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • mysql中如何查看最大连接数(max_connections)和修改最大连接数
  • 在 linux下输入"mysql"命令,进入mysql命令行,但出现“Can't connetc to local MySQL server thuough socket /var/lib/mysql/mysql.sock
  • sqlserver iis7站长之家
  • MySQL 重装MySQL后, mysql服务无法启动
  • php安装完成后如何添加mysql扩展
  • 为什么用linux安装盘安装了mysql后,启动mysql,提示找不到mysql.sock文件?
  • mysql中查询当前正在运行的SQL语句并找出mysql中运行慢的sql语句
  • 請教,在redhat linux7.2+mysql 中,系統提示mysql已啟動,網頁卻不能訪問mysql?
  • Myeclipse中自带Tomcat的JDBC连接池配置(mysql和mssql)
  • 求解释: useradd -g mysql mysql -d /home/mysql -s /sbin/nologin
  • MySQL Workbench的下载安装与使用教程
  • 在Linux内安装了Mysql,无法进入Mysql.
  • php中内置的mysql数据库连接驱动mysqlnd简介及mysqlnd的配置安装方式
  • 怎样在linux终端输入mysql直接进入mysql?
  • VS2012+MySQL+SilverLight5的MVVM开发模式介绍
  • mysql -u root mysql 怎么解释
  • MySQL索引基本知识
  • mm.mysql那里可以下载?www.mysql.com根本下载不了。谢谢了
  • Mysql设置查询条件(where)查询字段为NULL
  • MySQL集群 MySQL Cluster
  • mysql中字符串和时间互相转换的方法(自动转换及DATE_FORMAT函数)
  • MySQL存储引擎 MySQL Maria


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3