2010년 3월 21일 일요일

C++ - MySQL 연동 Class

MySQL 연동을 위해서는..

MySQL 제공하는 라이브러리의 헤더파일 포함 및 lib파일의 정적링크 또는 경로를 지정하며..

추가적으로 libmysql.dll 파일도 있어야 한다..

 

헤더소스

/**************************************
* http://ysksoft.com                             *
***************************************/

#define SOCKET int
#include <iostream>
#include <vector>
#include <mysql.h>
#pragma comment(lib, "Util/modules/MySQL/lib/libmySQL.lib")

using namespace std;

class UtilMySQL
{
private:
 MYSQL *mysql;
 MYSQL_RES *sql_result;
 MYSQL_ROW sql_row;
public:
 UtilMySQL(void);
 virtual ~UtilMySQL(void);
 virtual bool connect(char* pDatabaseHost, char* pDatabaseUser, char* pDatabasePassWord, char* pDatabaseName);
 virtual bool query(char *sql);
 virtual my_ulonglong numRows(MYSQL_RES* sql_result);
 virtual MYSQL_RES* storeResult();
 virtual MYSQL_ROW fetchRow(MYSQL_RES* sql_result);
 virtual void freeResult(MYSQL_RES* sql_result);
 virtual int numFields(MYSQL_RES* sql_result);
 virtual void connectClose();
 virtual vector< vector<char*> > select(char* sql);
};


cpp 소스

/**************************************
* http://ysksoft.com                             *
***************************************/

#include "Util/UtilMySQL.h"

UtilMySQL::UtilMySQL()
{
}
UtilMySQL::~UtilMySQL()
{
}
bool UtilMySQL::connect(char* pDatabaseHost, char* pDatabaseUser, char* pDatabasePassWord, char* pDatabaseName)
{
 this->mysql = mysql_init(0);
 if(!this->mysql) {
  cout<<"mysql failed"<<endl;
  return false;
    }
 this->mysql = mysql_real_connect(this->mysql, pDatabaseHost, pDatabaseUser, pDatabasePassWord, pDatabaseName, 3306, 0, 0);
 if (this->mysql == 0) {
  cout<<"Connection failed"<<endl;
  return false;
    }
 return true;
}
bool UtilMySQL::query(char* sql)
{
 if(mysql_query(this->mysql, sql)!=0) {
  fprintf(stderr, "Mysql query error : %s", mysql_error(this->mysql));
  return false;
 }
 return true;
}
my_ulonglong UtilMySQL::numRows(MYSQL_RES* sql_result)
{
 return mysql_num_rows(sql_result);
}
MYSQL_RES* UtilMySQL::storeResult()
{
 return mysql_store_result(this->mysql);
}
MYSQL_ROW UtilMySQL::fetchRow(MYSQL_RES* sql_result)
{
 return mysql_fetch_row(sql_result);
}
int UtilMySQL::numFields(MYSQL_RES* sql_result)
{
 return mysql_num_fields(sql_result);
}
void UtilMySQL::freeResult(MYSQL_RES* sql_result)
{
 mysql_free_result(sql_result);
}
void UtilMySQL::connectClose()
{
 mysql_close(this->mysql);
}
vector< vector<char*> > UtilMySQL::select(char* sql)
{
 this->query(sql);
 this->sql_result = this->storeResult();

 int row_field_count = this->numFields(this->sql_result);
 vector< vector<char*> > lists;

 int i = 0;
 while((this->sql_row=this->fetchRow(this->sql_result))!=0) {
  lists.push_back(vector<char*>());
  for(int x=0; x<row_field_count; x++) {
   lists[i].push_back(this->sql_row[x]);
  }
  i++;
 }
 this->freeResult(this->sql_result);
 return lists;
}

0 개의 댓글:

댓글 쓰기