• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

MySQL的C++封装

mysql 搞代码 4年前 (2022-01-09) 16次浏览 已收录 0个评论

最近的项目数据库管理系统从SQL SERVER2000迁移到了MySQL上来,之前基于ADO的连接方式连接上SQL SERVER,使用MySQL数据库管理系统之后,直接在MySQL的C语言的API上以面向对象的方式封装实现了数据库的创建,表的创建,数据库的读写操作快速搭建原型,目前没

最近的项目数据库管理系统从SQL SERVER2000迁移到了MySQL上来,之前基于ADO的连接方式连接上SQL SERVER,使用MySQL数据库管理系统之后,直接在MySQL的C语言的API上以面向对象的方式封装实现了数据库的创建,表的创建,数据库的读写操作快速搭建原型,目前没有添加连接池模块和事务处理。

源码托管在github上:https://github.com/figot/MySQLWrapper

1.MySQL的特性

使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性。
支持AIX、BSDi、FreeBSD、HP-UX、Linux、Mac OS、Novell NetWare、NetBSD、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统。
为多种編程语言提供了API。这些編程语言包括C、C++、C#、VB.NET、Delphi、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等。
支持多線程,充分利用CPU资源,支持多用户。
優化的SQL查询算法,有效地提高查询速度。
既能够作为一个单独的应用程序在客户端服务器网络环境中运行,也能够作为一个程序库而嵌入到其他的软件中。
提供多语言支持,常见的编码如中文的GB 2312、BIG5,日文的Shift JIS等都可以用作數據表名和數據列名。
提供TCP/IP、ODBC和JDBC等多种数据库连接途径。
提供用于管理、检查、优化数据库操作的管理工具。
可以处理拥有上千万条记录的大型数据库。

2.C++的API封装

用C++连接SQL有两种可直接使用的接口:MySQL Connector/C++和MySQL+ +,MySQL Connector/C++是最新发布的MySQL连接器,由Sun Microsystems开发。MySQL connector为C++提供面向对象的编程接口(API)和连接MySQL Server的数据库驱动器与现存的driver不同,Connector/C++是JDBC API在C++中的实现。换句话说,Connector/C++ driver的接口主要是基于Java语言的JDBC API。Java数据库连接(JDBC)是Java连接各种数据库的业界标准。Connector/C++实现了JDBC 4.0的大部分规范。熟悉JDBC编程的C++程序开发者可以提高程序开发的效率。

MySQL++是一个用C++封装了MySQL的C API的类库。它是建立标准C ++标准库(STL)之上,使处理数据库处理STL容器一样容易。此外,MySQL的++提供了让你避免最重复的工作,提供了原生C++接口。

3.MySQL的C++封装实现

在快速搭建原型的过程中,没有用到这两种连接方式,直接在MySQL C API上封装实现。

#ifndef __MYSQL_INTERFACE_H__#define __MYSQL_INTERFACE_H__#include "winsock.h"#include #include #include "mysql.h"#include #include #pragma comment(lib, "ws2_32.lib")#pragma comment(lib, "libmysql.lib")using namespace std;class MySQLInterface{public:  	MySQLInterface();	virtual ~MySQLInterface();	bool connectMySQL(char* server, char* username, char* password, char* database,int por<div>本文来源gaodai^.ma#com搞#代!码网</div>t);	bool createDatabase(std::string& dbname);	bool createdbTable(const std::string& query);	void errorIntoMySQL();	bool writeDataToDB(string queryStr);	bool getDatafromDB(string queryStr, std::vector<std::vector >& data);	void closeMySQL();public:	int errorNum;                    //错误代号	const char* errorInfo;             //错误提示private:	MYSQL mysqlInstance;                      //MySQL对象,必备的一个数据结构	MYSQL_RES *result;                 //用于存放结果 建议用char* 数组将此结果转存};#endif
#include "stdafx.h"#include "MySQLInterface.h"//构造函数 初始化各个变量和数据MySQLInterface::MySQLInterface():	errorNum(0),errorInfo("ok"){	mysql_library_init(0,NULL,NULL);	mysql_init(&mysqlInstance);	mysql_options(&mysqlInstance,MYSQL_SET_CHARSET_NAME,"gbk");}MySQLInterface::~MySQLInterface(){}//连接MySQLbool MySQLInterface::connectMySQL(char* server, char* username, char* password, char* database,int port){	if(mysql_real_connect(&mysqlInstance,server,username,password,database,port,0,0) != NULL)		return true;	else		errorIntoMySQL();	return false;}//判断数据库是否存在,不存在则创建数据库,并打开bool MySQLInterface::createDatabase(std::string& dbname){	std::string queryStr = "create database if not exists ";	queryStr += dbname;	if (0 == mysql_query(&mysqlInstance,queryStr.c_str()))	{		queryStr = "use ";		queryStr += dbname;		if (0 == mysql_query(&mysqlInstance,queryStr.c_str()))		{			return true;		}			}	errorIntoMySQL();	return false;}//判断数据库中是否存在相应表,不存在则创建表bool MySQLInterface::createdbTable(const std::string& query){	if (0 == mysql_query(&mysqlInstance,query.c_str()))	{		return true;	}	errorIntoMySQL();	return false;}//写入数据bool MySQLInterface::writeDataToDB(string queryStr){	if(0==mysql_query(&mysqlInstance,queryStr.c_str()))		return true;	else		errorIntoMySQL();	return false;	}//读取数据bool MySQLInterface::getDatafromDB(string queryStr, std::vector<std::vector >& data){	if(0!=mysql_query(&mysqlInstance,queryStr.c_str()))	{		errorIntoMySQL();		return false;	}	result=mysql_store_result(&mysqlInstance);	int row=mysql_num_rows(result);	int field=mysql_num_fields(result);	MYSQL_ROW line=NULL;	line=mysql_fetch_row(result);	int j=0;	std::string temp;	while(NULL!=line)	{			std::vector linedata;		for(int i=0; i<field;i++)		{			if(line[i])			{				temp = line[i];				linedata.push_back(temp);			}			else			{				temp = "";				linedata.push_back(temp);			}		}		line=mysql_fetch_row(result);		data.push_back(linedata);	}	return true;}//错误信息void MySQLInterface::errorIntoMySQL(){	errorNum=mysql_errno(&mysqlInstance);	errorInfo=mysql_error(&mysqlInstance);}//断开连接void MySQLInterface::closeMySQL(){	mysql_close(&mysqlInstance);}

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:MySQL的C++封装
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址