//CDataBase.h
#ifndef CDATABASE_H
#define CDATABASE_H
#include "stdio.h"
#include "/usr/include/mysql/mysql.h" //#include <mysql.h>
#include <string.h>
class CDataBase
{
public:
CDataBase(const char *host, const char *user, const char *passwd, const char *db,unsigned int port=3306);
~CDataBase();
bool ExecuteSql(const char* chSql);
MYSQL_RES * OpenRecordset(const char* chSql);
void FreeResult(MYSQL_RES *result);
private:
MYSQL mysql;
bool _bOpen;
const char *_host;
const char *_user;
const char *_passwd;
const char *_db;
unsigned int _port;
protected:
bool Open();
void Close();
bool GetConState();
};
#endif
//CDataBase.cpp
#include "CDataBase.h"
CDataBase::CDataBase(const char *host, const char *user, const char *passwd, const char *db,unsigned int port)
{
_host = host;
_user = user;
_passwd = passwd;
_db = db;
_port=port;
_bOpen = false;
Open();
}
CDataBase::~CDataBase()
{
Close();
}
bool CDataBase::GetConState()
{
return _bOpen;
}
bool CDataBase::Open()
{
if( !mysql_init(&mysql) )
{
printf("\nFailed to initate MySQL connection");
return false;
}
if (!mysql_real_connect(&mysql,_host,_user,_passwd,_db,_port,NULL,0))
{
printf( "Failed to connect to MySQL: Error: %s\n", mysql_error(&mysql));
return false;
}
printf("Logged on to database sucessfully\n");
_bOpen = true;
return _bOpen;
}
void CDataBase::Close()
{
if(_bOpen)
{
mysql_close(&mysql);
_bOpen = false;
}
}
bool CDataBase::ExecuteSql(const char* chSql)
{
if(!GetConState())
return false;
if(mysql_real_query(&mysql,chSql,strlen(chSql))==0)
return true;
}
MYSQL_RES * CDataBase::OpenRecordset(const char* chSql)
{
MYSQL_RES *rs = NULL;
if(ExecuteSql( chSql ))
{
rs = mysql_store_result(&mysql);
}
return rs;
}
void CDataBase::FreeResult(MYSQL_RES *result)
{
if(result)
mysql_free_result(result);
}
//Test.cpp
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <iostream>
#include <cstdlib>
#include "CDataBase.h"
using namespace std;
int main(int argc, char *argv[])
{
const char *host = "192.168.16.204";
const char *user = "launchcloud";
const char *pwd = "Launch-2013-Cloud";
const char *dbn = "launchcloud";
unsigned int port=3366;
//构造对象
CDataBase *db = new CDataBase(host,user,pwd,dbn,port);
//创建一个张
db->ExecuteSql( "create table tt1(id int ,name varchar(20))");
//插入一个数据
db->ExecuteSql( "insert into tt1(id,name)values('31','abc')");
//查询数据
MYSQL_RES *res = NULL;
MYSQL_ROW row;
res = db->OpenRecordset("select * from tt1");
if(res)
{
cout << "OpenRecordset\n" << endl;
while(row = mysql_fetch_row(res))
{
for(int t=0;t<mysql_num_fields(res);t++)
{
printf("%s ",row[t]);
}
printf("\n");
}
}
db->FreeResult(res);
delete db;
db = NULL;
return EXIT_SUCCESS;
}
/ g++ -o test TestDataBase.cpp CDataBase.o -L./lib -lmysqlclient//