`
lppchina
  • 浏览: 51268 次
  • 性别: 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
分享到:
评论

相关推荐

    Mysql标准c++封装

    MySQL标准C++封装是将MySQL数据库的访问功能与C++编程语言相结合的一种技术,使得开发者可以使用C++的语法和特性来操作MySQL数据库。在Ubuntu操作系统下,这种封装经过了测试,确保了其在Linux环境中的兼容性和稳定...

    mysql c++ 封装类

    在C++中封装MySQL API,我们可以创建一个类,这个类将MySQL的C API函数封装为成员方法。例如,我们可以有如下的类设计: 1. `MySqlConnection` 类:代表一个到MySQL服务器的连接。它包含初始化和关闭连接的方法,如...

    MySql-C-API.rar_mysql api_mysql c++

    本项目提供了一个简单的 MySQL C API 的 C++ 封装,旨在帮助初学者更容易地理解和使用 MySQL API。 在 C++ 中封装 MySQL C API 可以使代码更整洁,更具面向对象特性,同时也方便了错误处理和资源管理。以下是一些...

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

    总结来说,C++中的MySQL API封装类是将数据库操作抽象化,提供了一种面向对象的方式来处理MySQL数据库。通过封装类,开发者可以更高效、更安全地管理和操作数据库,同时降低代码的复杂度,提高可读性和可维护性。而...

    C++封装的mysql类

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

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

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

    mysql-connector-c++-1.1.9-winx64.rar_MYSQL_c# mysql_c++ 封装mysql_

    4. **C++封装MySQL** 封装MySQL通常涉及创建C++类,这些类将libmysql库的函数包装成更易于使用的成员方法。这包括连接数据库(`mysql_real_connect`)、执行SQL语句(`mysql_query`)、获取结果集(`mysql_store_...

    mysql C++封装类

    MySQL C++封装类是一种方便开发者在C++程序中与MySQL数据库进行交互的工具。它将MySQL的C API进行抽象和封装,提供了一套更符合C++编程习惯的接口,简化了数据库操作,使得代码更加简洁易读。在这个压缩包中,有两个...

    mysql c++封装类库 方便mysql编程

    这个"mysql c++封装类库"就是为了简化MySQL与C++之间的交互而设计的。 封装类库的核心思想是将数据库连接、查询执行、结果处理等操作包装在一个或多个C++类中。这样,程序员可以通过调用类的方法来实现对数据库的...

    C++ 封装的MYSQL 类

    本篇文章将详细探讨“C++封装的MYSQL类”,以及如何实现多条SQL语句的执行。 首先,我们来理解“封装”的概念。在面向对象编程(OOP)中,封装是核心原则之一,它隐藏了数据和功能的具体实现细节,仅对外提供接口。...

    c++封装MYSQL数据库连接代码

    在C++编程中,与MySQL数据库进行交互是常见的任务,特别是...以上就是关于"C++封装MYSQL数据库连接代码"的核心知识点。通过这样的封装,开发者可以方便地在C++应用程序中集成数据库操作,同时保持代码的整洁和模块化。

    mysql.rar_C++连接mysql_MYSQL连接_c 封装 mysql_mysql c++_mysql封装

    综上所述,"mysql.rar"中的源代码提供了使用C++封装MySQL C API的示例,这包括了数据库连接、查询和操作的实现。通过这样的封装,我们可以更方便地在C++项目中集成MySQL数据库功能,同时保持代码的清晰和高效。对于...

    mysql访问类 c++封装,linux平台和windows平台下都可用

    MySQL访问类C++封装是一种在C++编程语言中与MySQL数据库进行交互的方式,它使得开发者能够在C++程序中轻松地执行SQL查询、管理数据库连接、处理结果集等操作。这样的封装通常包括对MySQL C API的包装,以提供更面向...

    MYSQL++ C++ API

    MySQL++ 是一个开源的 C++ 库,它提供了一个方便且功能丰富的接口,用于与 MySQL 数据库管理系统进行交互。这个库使得开发人员可以利用 C++ 的强类型和面向对象特性来编写高效、易于维护的数据库应用程序。MySQL++ ...

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

    标题提到的“简单封装的Mysql类(C++)”正是这样的一个工具,它为开发者提供了更易用的接口。 这个封装类主要目标是使C++开发者能够更便捷地进行MySQL数据库的操作,包括连接数据库、执行SQL语句、获取结果集、断开...

    mysql封装.zip

    本压缩包"mysql封装.zip"提供了使用C++对MySQL数据库进行封装的代码示例,旨在简化MySQL在C++项目中的应用。 在C++中封装MySQL,通常会涉及到以下知识点: 1. **MySQL Connector/C++库**:这是MySQL官方提供的C++...

    mysql的c++ 基本API

    在MySQL的C++ API中,开发者可以通过一系列库函数来实现数据库的连接、查询、插入、更新和删除操作。下面我们将详细探讨这些关键知识点。 1. **MySQL C++ Connector**: MySQL提供了C++ Connector库,它允许C++...

    api_mysql.zip_mysql api_mysql c#_mysql c++_visual c

    在C++中,虽然可以使用C API(如上述的libmysqlclient),但也有更高级别的封装库,如`MySQL Connector/C++`,它提供了一个符合C++标准的面向对象接口,使开发更加高效。不过,这个压缩包没有直接包含C++的库文件,...

    c++ mysqlhelper 数据库访问层功能封装

    本篇文章将深入探讨如何使用C++封装一个名为`mysqlhelper`的数据库访问层,该层为MySQL数据库的访问提供了简洁且跨平台的解决方案。 `mysqlhelper`类封装了对MySQL数据库的基本操作,如连接、查询、执行SQL语句、...

    MySQL的C_API几个封装

    这个名字暗示可能是一个针对MySQL C API的C++11或更高版本的封装,可能使用了现代C++特性,如智能指针、RAII(Resource Acquisition Is Initialization)和异常安全。它可能包含更高级别的抽象,例如数据库连接管理...

Global site tag (gtag.js) - Google Analytics