+------------------------------------------------------------------+
CMysql version 1.0 [Sunhchul KIM]
+-----------------------------------------------------------------+
■ CMysql()
■ 생성자
■ 객체를 생성한다.
+-----------------------------------------------------------------+
■ bool Connect(const char *host=NULL,
const char *username=NULL,
const char *password=NULL,
const char *database=NULL,
const unsigned int port=0,
const char *unix_socket=NULL,
const unsigned int client_flag=0);
■ Mysql 서버에 연결을 시도한다.
■ host : Mysql 서버의 주소 (IP 나 도메인 네임)
■ username : Mysql 서버에 등록되어 있는 사용자 이름(NULL일 때 현재 로긴한 사용자아이디)
■ password : Mysql 서버에 등록되어 있는 사용자의 비밀번호(NULL 일 때 암호를 전달하지 않는다.
■ database : 사용할 데이타 베이스
■ port : 연결할 포트 , 디폴트 포트를 사용하기 위해 0 을 준다
■ unix_socket : 특정 연결에 사용할 때 사용한다. 자세한 사항은 Mysql 전문서적을 참고한다
■ client_flag : 특정 연결에 사용할 때 사용한다. 자세한 사항은 Mysql 전문서적을 참고한다
■ 연결이 성공하면 true 실패하면 false
■ 초기화가 되있지 않을 경우 예외 발생
+-----------------------------------------------------------------+
■ void Disconnect()
■ 연결을 끊는다
+-----------------------------------------------------------------+
■ bool IsConnect()
■ 현재 연결이 되어 있는지를 확인한다
■ 연결 되어 있다면 true , 아니라면 false
+-----------------------------------------------------------------+
■ bool Query(const char *szString);
■ Mysql 서버에 쿼리를 수행한다.
■ szString : 실행할 쿼리문
■ 쿼리가 성공적이면 true 아니면 false
■ 연결이 되어 있지 않으면 예외 발생
+-----------------------------------------------------------------+
■ bool IsBOF()
■ 결과레코드셋을 탐색 할 때 레코드셋의 처음인가?
■ 예/아니오
+-----------------------------------------------------------------+
■ bool IsEOF()
■ 결과레코드셋을 탐색 할 때 레코드셋의 마지막인가?
■ 예/아니오
+-----------------------------------------------------------------+
■ void First()
■ 결과 레코드셋을 처음으로 돌린다.
+-----------------------------------------------------------------+
■ void Last()
■ 결과 레코드셋을 마지막으로 돌린다.
+-----------------------------------------------------------------+
■ void Next()
■ 결과 레코드셋의 현재 레코드에서 다음 레코드로 이동한다.
■ 마지막 레코드에서 Next() 를 다시 호출하면 예외 발생
+-----------------------------------------------------------------+
■ void Prev()
■ 결과 레코드셋의 현재 레코드에서 이전 레코드로 이동한다.
■ 처음 레코드에서 Prev() 를 다시 호출하면 예외 발생
+-----------------------------------------------------------------+
■ void Move(int n=1)
■ 결과 레코드셋의 현재 레코드에서 특정 수 많큼 이동한다.
■ 음수는 이전, 양수는 이후
■ 레코드셋의 레코드수(범위)에 벗어나면 예외 발생
+-----------------------------------------------------------------+
■ char * Field(const char *szFieldName)
■ 레코드의 특정 필드값을 이름으로 접근한다.
■ ex) mysql.Field(\USER\); //USER 필드에서 값을 가져온다
■ 숫자 0과 널포인터 0을 구분하지 못 한다.
+-----------------------------------------------------------------+
■ char * Field(const my_ulonglong iFieldIndex)
■ 레코드의 특정 필드값을 인덱스로 접근한다.
■ ex) mysql.Field(1); //두번째(0부터 시작) 필드에서 값을 가져온다
+-----------------------------------------------------------------+
■ char * operator[](const my_ulonglong iFieldIndex)
■ char * Field(const my_ulonglong iFieldIndex) 와 같은 기능을 한다
+-----------------------------------------------------------------+
■ char * operator[](const char *szFieldName)
■ Field(const char *szFieldName) 과 같은 역할을 한다.
■ 숫자 0과 널포인터 0을 구분하지 못 한다.
+----------------------------------------------------------------+
//+----------------------------------------------------------------+
//
// 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] <
★ 컴파일을 하려면 Mysql Library 가 필요합니다. http://www.mysql.com 에서 받으세요
★ 문의사항이 있을경우 이에일이나 홈페이지로 연락해주세요 ;)
|