MySQLのC++パッケージ
4888 ワード
最近のプロジェクトデータベース管理システムはSQL SERVER 2000から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クエリーアルゴリズムは、クエリーの速度を効果的に向上させます.クライアントサーバネットワーク環境で単独のアプリケーションとして実行することもできるし、他のソフトウェアに1つのライブラリとして埋め込むこともできる.中国語のGB 2312、BIG 5、日本語のShift JISなど、多くの言語サポートを提供し、データテーブル名とデータ列名として使用することができます.TCP/IP、ODBC、JDBCなど多くのデータベース接続ルートを提供します.データベース操作の管理、チェック、最適化に使用する管理ツールを提供します.数千万件のレコードを持つ大規模なデータベースを処理できます.
2.C++のAPIパッケージ
C++でSQLを接続するには、MySQL Connector/C++とMySQL++、<1>MySQL Connector/C++の2つの直接使用可能なインタフェースがあります.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++は、MySQLをC++でカプセル化したC APIのクラスライブラリです.標準C++標準ライブラリ(STL)を構築した上で、データベースを処理してSTLコンテナを処理するのと同じように簡単です.また、MySQLの++は、最も重複しない作業を提供し、オリジナルのC++インタフェースを提供します.
3.MySQLのC++パッケージ実装
プロトタイプを迅速に構築する過程で,この2つの接続方式は用いられず,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クエリーアルゴリズムは、クエリーの速度を効果的に向上させます.クライアントサーバネットワーク環境で単独のアプリケーションとして実行することもできるし、他のソフトウェアに1つのライブラリとして埋め込むこともできる.中国語のGB 2312、BIG 5、日本語のShift JISなど、多くの言語サポートを提供し、データテーブル名とデータ列名として使用することができます.TCP/IP、ODBC、JDBCなど多くのデータベース接続ルートを提供します.データベース操作の管理、チェック、最適化に使用する管理ツールを提供します.数千万件のレコードを持つ大規模なデータベースを処理できます.
2.C++のAPIパッケージ
C++でSQLを接続するには、MySQL Connector/C++とMySQL++、<1>MySQL Connector/C++の2つの直接使用可能なインタフェースがあります.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++は、MySQLをC++でカプセル化したC APIのクラスライブラリです.標準C++標準ライブラリ(STL)を構築した上で、データベースを処理してSTLコンテナを処理するのと同じように簡単です.また、MySQLの++は、最も重複しない作業を提供し、オリジナルのC++インタフェースを提供します.
3.MySQLのC++パッケージ実装
プロトタイプを迅速に構築する過程で,この2つの接続方式は用いられず,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 port);
bool createDatabase(std::string& dbname);
bool createdbTable(const std::string& query);
void errorIntoMySQL();
bool writeDataToDB(string queryStr);
bool getDatafromDB(string queryStr, std::vector<: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()
{
}
// 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<: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<:string> linedata;
for(int i=0; i