웹솔루션개발 22년 노하우! 해피CGI의 모든것

[해피CGI][cgimall] MySQL C++ CLASS version 1.0 본문

웹프로그램밍 자료실/데이터베이스 자료

[해피CGI][cgimall] MySQL C++ CLASS version 1.0

해피CGI윤실장 2016. 12. 16. 09:03

//+-----------------------------------------------------------------------------------------+
//
// MySQL C++ CLASS version 1.0
// written by Sunchul KIM.
// email : paranwave@korea.com
// homeapge : http://douner.pe.kr
// OS : Linux Redhat 7.1 , Windows 2000
// License : GPL !!!
//
//+-----------------------------------------------------------------------------------------+

Mysql 을 쉽게 사용할 수 있는 클래스 라이브러리입니다. C++ 플그램에서 Mysql 클라이언트를 만들
어야 했는데 클래스로 관련 라이브러리를 만들어 두면 편리할 것 같아서 만들어 보았습니다. 문법
은 밑에 올린 PHP 용 Mysql 클래스와 비슷하며 사용자가 에러를 점검하지 않아도 내부에서 예외처리
를 할 수 있도록 만들었습니다. 이번 클래스는 잡다한 기능은 제외하고 MySQL 에 접속, 쿼리 수행,
접속 끊기, DB 바꾸기의 기능이 있습니다. 추가적인 기능은 여러분이 쉽게 만들 수 있을 것이라고
생각합니다 ;)

테스트는 윈도우와 리눅스에서 이루어졌습니다.
윈도우즈 Visual C++ 6.0 에서는 operator[] 에 대한 ambiguous 에러가 발생하지 않았지만 리눅스
에서는 발생하더군요. 그래서 리눅스에서는 operator[int] 만을 사용할 수 있습니다. 윈도우즈에
서는 operator[int] 와 operator[char *] 를 이용할 수 있습니다.

아래는 쿼리를 했을 경우 필드 값에 접근하는 방법을 보여줍니다.

CMysql mysql;
mysql.Connect("localhost", "user", "pw1234", "mysql");
mysql.Query("select * from user");

cout << mysql[0] << mysql[1] << mysql[2] << endl;
cout << mysql["Host"] << mysql["User"] << mysql["Password"] << endl;(!윈도우즈만 실행됨!)
cout << mysql.Field(0) << mysql.Field(1) << mysql.Field(2) << endl;
cout << mysql.Field("Host") << mysql.Field("User") << mysql.Field("Password") << endl;

하지만 0 이란 값의 애매함으로 mysql[0] 의 두가지로 해석될 수 있습니다. 바로 int 형의 0 과
널포인터의 0, 이 때문에 컴파일러는 에러를 발생하게 됩니다. 해결책은 mysql[(int)0] 처럼 확
실하게 표현하는것입니다. 물론 mysql.Field() 함수도 같은 문제가 있습니다.

방법은 mysql.Field() 는 필드의 이름으로 접근하는 경우에만 사용하고 mysql[] 필드 인덱스 번호
로만 접근하는데 사용합니다. 그리고 윈도우즈에서 operator[const char *szString] 부분을 주석
처리합니다. 물론 CPP 화일에서도 관련 함수를 수정하여 줍니다. 수정하는 것은 그리 어렵지 않
습니다. 자료실에 올려진 소스는 리눅스 부분만 수정하였습니다. ;)

전체적으로 사용하는 예제입니다.

[윈도우]
int main()
{
int i=0;
CMysql mysql;
mysql.Connect("localhost","root","bluedog","mysql");
mysql.Query("select * from user");
mysql.Disconnect();

while(!mysql.IsEOF())
{
cout << mysql[(int)0] <<" "<< mysql[1] <<" "<< mysql[2] <<" "<< mysql[3] < cout << mysql["User"] << endl; //윈도우에서만 됨
mysql.Next();
}

mysql.First();
while(!mysql.IsEOF())
{
cout << "n" << mysql[(int)0] <<" "<< mysql[1] <<" "<< mysql[2] <<" "<< mysql[3] < mysql.Next();
}

mysql.Last();
while(!mysql.IsBOF())
{
cout << "p" << mysql[(int)0] <<" "<< mysql[1] <<" "<< mysql[2] <<" "<< mysql[3] < mysql.Prev();
}

//cout << mysql[(int)0] <<" "<< mysql[1] <<" "<< mysql[2] <<" "<< mysql[3] <
// mysql.Move(1000); //예외 발생
mysql.First();
mysql.Prev(); // 예외발생 , 제일 처음의 앞은 없다.
cout << " 0 " << mysql[(int)0] <<" "<< mysql[1] <<" "<< mysql[2] <<" "<< mysql[3] < mysql.Next();
cout << " 1 " << mysql[(int)0] <<" "<< mysql[1] <<" "<< mysql[2] <<" "<< mysql[3] < mysql.Next();
cout << " 2 " << mysql[(int)0] <<" "<< mysql[1] <<" "<< mysql[2] <<" "<< mysql[3] <
return 0;
}

[리눅스]

int main()
{
int i=0;
CMysql mysql;
mysql.Connect("localhost","root","","mysql");
mysql.Query("select * from user");
mysql.Disconnect();

while(!mysql.IsEOF())
{
cout << mysql[0] <<" "<< mysql[1] <<" "<< mysql[2] <<" "<< mysql[3] < cout << mysql.Field(0) << mysql.Field("User") << endl;
mysql.Next();
}
mysql.First();
while(!mysql.IsEOF())
{
cout << "n" << mysql[0] <<" "<< mysql[1] <<" "<< mysql[2] <<" "<< mysql[3] < mysql.Next();
}

mysql.Last();
while(!mysql.IsBOF())
{
cout << "p" << mysql[0] <<" "<< mysql[1] <<" "<< mysql[2] <<" "<< mysql[3] < mysql.Prev();
}
//cout << mysql[(int)0] <<" "<< mysql[1] <<" "<< mysql[2] <<" "<< mysql[3] < //mysql.Move(1000);

mysql.First();
mysql.Prev();
cout << " 0 " << mysql[0] <<" "<< mysql[1] <<" "<< mysql[2] <<" "<< mysql[3] < mysql.Next();
cout << " 1 " << mysql[0] <<" "<< mysql[1] <<" "<< mysql[2] <<" "<< mysql[3] < mysql.Next();
cout << " 2 " << mysql[0] <<" "<< mysql[1] <<" "<< mysql[2] <<" "<< mysql[3] <
return 0;
}

★ 컴파일을 하려면 Mysql Library 가 필요합니다. http://www.mysql.com 에서 받으세요
★ 문의사항이 있을경우 이에일이나 홈페이지로 연락해주세요 ;)

 

홈페이지바로가기 

Comments