`
lppchina
  • 浏览: 49137 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类

Mysql API之C++封装(一)

阅读更多
由于项目要求原因,需要用C或者C++调用mysql的API接口来操作mysql数据库,在google和百度上搜了一下,发现两个比较mini的接口类,感觉比较不错,下载下来编译了一下,改了一些错误,源码如下:
DBClient.h ------
#ifndef __DB_CLIENT_H__
#define __DB_CLIENT_H__

#include <mysql.h>
#include <stdlib.h>
#include <string.h>

/**
* @brief enumaration for sql cmd type
*/
enum Cmd
{
	CMD_SELECT,
	CMD_INSERT,
	CMD_DELETE,
	CMD_UPDATE
};

#define MAX_CHAR_LEN 64

/**
* @brief this is a class for operating the mysql database
*/
class DBClient
{
public:
	  DBClient(): m_usDBPort(0), m_pResultSet(NULL)
	  {
		  memset(m_szDBIP, 0, sizeof(m_szDBIP));
		  memset(m_szUserName, 0, sizeof(m_szUserName));
		  memset(m_szPassword, 0, sizeof(m_szPassword));
		  memset(m_szDBName, 0, sizeof(m_szDBName));
	  }

	  ~DBClient()
	  {
		  FreeResultSet();
		  mysql_close(&m_oDBHandle);
	  }

	  /**
	  * @brief initialize the db connection info
	  * @param pDBIP, the db ip address
	  * @param usDBPort, the db port
	  * @param pDBName, the db name
	  * @param pUserName, the db username
	  * @param pPassword, the db password
	  * @return true if init success, otherwise, false
	  */
	  bool Init(const char * pDBIP, unsigned short usDBPort,
		  const char * pDBName, const char * pUserName, 
		  const char * pPassword);

	  /**
	  * @brief connect the db server
	  * @return true if connect success, otherwise, false
	  */
	  bool Connect();

	  /**
	  * @brief execute the sql statement
	  * @param pSqlStr, the sql statement pointer
	  * @return true if execute success, otherwise, false
	  */
	  bool Execute(const char * pSqlStr, Cmd eCmd);

	  /**
	  * @brief get the next result of the operation
	  * @param pRes, the result row
	  * @param pLen, the array of the length of every fields
	  * @param nNum, the num of fields
	  * @return true if get the next result success, otherwise, false
	  */
	  bool GetNextResult(char **& pRes, unsigned long *& pLen, 
		  int & nNum);

	  /**
	  * @brief get the most recent error No.
	  */
	  unsigned int GetErrorNo()
	  {
		  return mysql_errno(&m_oDBHandle);
	  }
private:
	/**
	* @brief free the memory of the result set
	*/
	void FreeResultSet();
private:
	/*db ip address*/
	char m_szDBIP[MAX_CHAR_LEN];
	/*db port*/
	unsigned short m_usDBPort;
	/*db name*/
	char m_szDBName[MAX_CHAR_LEN];
	/*db username*/
	char m_szUserName[MAX_CHAR_LEN];
	/*db user's password*/
	char m_szPassword[MAX_CHAR_LEN];
	/*the db connection handle object*/
	MYSQL m_oDBHandle;
	/*the pointer of result set for operating's result*/
	MYSQL_RES * m_pResultSet;
};
#endif // __DB_CLIENT_H__


DBClient.cpp实现如下:
#include "DBClient.h"
#include <string.h>

#pragma comment(lib, "libmysql.lib")

bool DBClient::Init(const char * pDBIP, unsigned short usDBPort,
		const char * pDBName, const char * pUserName,
	         const char * pPassword)
{
	strcpy(m_szDBIP, pDBIP);
	m_usDBPort = usDBPort;
	strcpy(m_szDBName, pDBName);
	strcpy(m_szUserName, pUserName);
	strcpy(m_szPassword, pPassword);
	if (NULL == mysql_init(&m_oDBHandle))
	{
		return false;
	}
	return true;
}

bool DBClient::Connect()
{
	if (NULL == mysql_real_connect(&m_oDBHandle, m_szDBIP,
		m_szUserName, m_szPassword,
		m_szDBName, m_usDBPort,
		NULL, 0))
	{
		return false;
	}
	return true;
}

bool DBClient::Execute(const char * pSqlStr, Cmd eCmd)
{
	if (0 != mysql_query(&m_oDBHandle, pSqlStr))
	{
		return false;
	}

	if (CMD_SELECT == eCmd)
	{
		FreeResultSet();
		if (NULL == (m_pResultSet = mysql_store_result(&m_oDBHandle)))
		{
			return false;
		}
	}
	return true;
}

bool DBClient::GetNextResult(char **& pRes, unsigned long *& pLen, 
							 int & nNum)
{	
	MYSQL_ROW pRow = mysql_fetch_row(m_pResultSet);
	if(NULL == pRow)
	{
		return false;
	}
	pRes = pRow;
	nNum = mysql_num_fields(m_pResultSet);
	pLen = mysql_fetch_lengths(m_pResultSet);
	return true;
}

void DBClient::FreeResultSet()
{
	if (NULL != m_pResultSet)
	{
		mysql_free_result(m_pResultSet);
	}
	m_pResultSet = NULL;
}


接口比较简洁明快,如果你感觉功能比较简单的话,可以下载开源的SQLAPI++,我这有拷贝,需要的可以给我的邮箱发邮件,我的邮箱lppchina@gmail.com
分享到:
评论

相关推荐

    C++封装的mysql类

    利用mysql api 封装的 c++类 ,实现了mysql数据库的连接,查询以及增删改。 开发环境为vs2013+mysql5.7。 项目中已包含mysql5.7 的include、lib,下载后输入正确的用户信息及简单修改即可进行测试运行。 注意编译运行...

    mysql C++封装类

    一个mysql API的封装类。使用mysql数据库的人,可以直接使用此类,在头文件中有使用说明。

    C++MYSQL API封装类及应用例子

    封装类MYSQL的API函数,有一个例子,适合拿来用,不会的可以借鉴例子学习

    简单封装的Mysql类(C++)

    Mysql C API简单封装类,包含所需的.h,.dll,.lib文件......

    一个封装了MySQL C API的C++连接池

    一个封装了MySQL C API的包了连接池的C++封装 CDBConnectionPool 连接池类 CDBConnection 连接对象 CDBRecordset 返回的记录集对象,开发人员只需要操作这个对象 DBDef.h,包含了所有对象定义

    用C++封装MySQL的API的教程

    其实相信每个和mysql打过交道的程序员都应该会尝试去封装一套mysql的接口,这一次的封装已经记不清是我第几次了,但是每一次我希望都能做的比上次更好,更容易使用。 先来说一下这次的封装,遵守了几个原则,其中...

    c++ 连接mysql 跨平台

    c++ 对mysql c api的封装,偏重于对存储过程的使用,理论上支持跨平台

    c++封装跨平台mysql类

    对mysql api简单封装,易用是前提,代码不到四百行.分成两个类,mysqldb类进行连接,写入操作,mysqlreader对mysqldb返回的结果集进行读取.还需要完善的地方,请多提意见.

    mysql++使用及封装示例文档

    c++中通过mysql++ api访问mysql数据库的使用介绍及一个msql++ api的封装文档,收藏之,用时可以参考

    C++操作数据库API

    目前,本人也正在研究MYSQL的API,正准备将mysql也封装到此库中。由于时间有限,能力有限。我无法将其他的库也集成到此库中。要是有牛人,能实现就好了。咱们C/C++在数据操作这方面的不足也就弥补上来了。

    C++读写MySQL

    看过很多C或是C++操作MySQL数据库的文章...写这篇文章的目的不是别的,就一个,告诉您用MySQL的C API直接操作MySQL数据,并做了比较高效的封装,可以帮助开发人员大幅度提高采用MySQL的C API操作MySQL数据库的效率。

    mysql操作类,封装了c语言相关的api,可实现基本的查询、插入、修改和删除操作

    封装了c语言相关的api,可实现基本的查询、插入、修改和删除操作

    c++ mysql数据库操作api接口的封装

    故api封装之后有如下几个关键的接口: 1:bool connect(); //连接数据库,初始化数据库连接等 2:bool prepare(const std::string &query);//预处理 3:template void bindValue(int pos, const T &value);//给...

    windows关于qt的数据库操作封装类以及用例,c++代码

    windows 关于qt的数据库操作封装类 以及用例: SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的功能特点有: 1. ACID事务 2. 零配置 – 无需安装和管理配置 3....

    Linux下实现C++操作Mysql数据库

    想用C++写项目,数据库是必须的,所以这两天学了一下C++操作MySQL数据库的方法。也没有什么教程,就是在网上搜的知识,下面汇总一下。 连接MySQL数据库有两种方法:第一种是使用ADO连接,不过这种只适合Windows...

    数据库操作API封装

    数据库操作库(mysql,redis、memcache API 封装可直接调用)

    MySQL C++数据访问类

    使用C++对MySql的C API进行封装,附有例子和文档

    vc++读写mysql

    看过很多C或是C++操作MySQL数据库的文章...写这篇文章的目的不是别的,就一个,告诉您用MySQL的C API直接操作MySQL数据,并做了比较高效的封装,可以帮助开发人员大幅度提高采用MySQL的C API操作MySQL数据库的效率。

Global site tag (gtag.js) - Google Analytics