database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Files 14965 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 14965
Mysql C++ 클래스
작성자
김성철(douner)
작성일
2002-01-26 08:11
조회수
7,652
첨부파일: mysqlclass.zip (158,174bytes)
+------------------------------------------------------------------+
  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 에서 받으세요

★ 문의사항이 있을경우 이에일이나 홈페이지로 연락해주세요 ;)

[Top]
No.
제목
작성자
작성일
조회
16249MyOle DB에서 한글 문제 해결
정석교
2002-06-14
7146
15754vb에서 mysql접속하기
이익재
2002-04-19
6860
15397에디터형 입력, 수정, 삭제 편한쿼리툴
신범호
2002-03-08
6048
14965Mysql C++ 클래스
김성철
2002-01-26
7652
14942MyAccess 1.5
정재익
2002-01-24
5510
14742DBF2MySQL
정재익
2002-01-12
5259
14703Writing JDBC Applications for MySQL with NuSphere Advantage (PDF)
정재익
2002-01-11
4514
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.051초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다