来源:自学PHP网 时间:2015-04-16 10:51 作者: 阅读:次
[导读] 最近的项目数据库管理系统从SQL SERVER2000迁移到了MySQL上来,之前基于ADO的连接方式连接上SQL SERVER,使用MySQL数据库管理系统之后,直接在MySQL的C语言的API上以面向对象的方式封装实现了...
|
最近的项目数据库管理系统从SQL SERVER2000迁移到了MySQL上来,之前基于ADO的连接方式连接上SQL SERVER,使用MySQL数据库管理系统之后,直接在MySQL的C语言的API上以面向对象的方式封装实现了数据库的创建,表的创建,数据库的读写操作快速搭建原型,目前没有添加连接池模块和事务处理。 1.MySQL的特性使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性。 2.C++的API封装用C++连接SQL有两种可直接使用的接口:MySQL Connector/C++和MySQL+ +,<1>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++程序开发者可以提高程序开发的效率。 <2>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 <iostream> #include <string> #include "mysql.h" #include <vector> #include <string> #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 port); 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<std::string> >& 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()
{
}
//连接MySQL
bool 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<std::string> >& 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<std::string> 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);
}
|
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com