C++/Source

MFC - MySQL 연동하는 법 정리

gandus 2011. 5. 20. 13:30

연동시에 필요한 함수들 정리


mysql_init(&mysql);  //  연동의 초기화를 담당한다.

mysql_real_connect(&mysql, DB_ADDRESS, DB_ID, DB_PASS, DB_NAME ,3306,0,0)   // 여기서 부터 실질적으로 연동을 한다.

mysql_query(&mysql,"set names euckr");   // 쿼리를 보낸다.

m_res = mysql_store_result(&mysql)    // 결과를 저장한다.

row = mysql_fetch_row(m_res)  //  row 에 값을 담아온다.

mysql_fetch_array()     //  row 에  row[id]  이런식으로 인덱스를 이용할 수 있다.
 

mysql_num_rows  // 레코드의 총 갯수를 파악한다.

mysql_num_fields  // 하나의 레코드 안에 필드(속성)의 갯수를 파악한다.

 




아래 부터 연동과 간단한 예제 방법이다.

mysql 설치시에 커스텀으로 설치 - x자로 된것들을 모든 것들을 설치한다.

server machine 을 설치하고 - 랭귀지도 best 로 설정한다

mfc 프로젝트 속성에서 -  c/c++  ->  
 추가 디렉토리 설정  :  "C:\Program Files\MySQL\MySQL Server 5.0\include"


링커에도 - 추가 라이브러리
: "C:\Program Files\MySQL\MySQL Server 5.0\lib\opt" 



stdafx.h 파일에 다음과 같이 선언해 준다.

 

/*******  Mysql 연동을 위한 변수를 선언한다.  *********/

#include "mysql.h"

#include <WinSock2.h>

#pragma comment(lib,"libmysql.lib")

#pragma comment(lib,"ws2_32.lib")


#define DB_ADDRESS "localhost"

#define DB_ID "root"

#define DB_PASS "cpc1234"

#define DB_NAME "gandus"



/****  mysql 변수를 추가한다.  ****/

extern MYSQL_ROW row; // mysql 의 행을 맡는다.

extern MYSQL_RES *m_res; // mysql의 결과를 받아온다

extern MYSQL mysql; // mysql의 전체적인 연동을 담당한다.
 


stdafx.cpp 파일에 다음과 같이 선언해 준다. 

MYSQL_ROW row;

MYSQL_RES *m_res;

MYSQL mysql; 



db를 연결할때 사용할 소스 코드에  상황에따라 적어주면 된다.


// mysql의 초기화를 담당한다.

mysql_init(&mysql);



if(!mysql_real_connect(&mysql, DB_ADDRESS, DB_ID, DB_PASS, DB_NAME ,3306,0,0))

{

AfxMessageBox(mysql_error(&mysql),MB_OK);

}


else

{

mysql_query(&mysql,"set names euckr"); //한글 인식

AfxMessageBox("DB 연결 성공",MB_OK);

//mysql_close(&mysql);

}




/***********  mysql의 명령문을 사용하는 예제이다.  ************/


CString query;

query.Format("select * from gandus_table");

if(mysql_query(&mysql, query))

{ // 쿼리 요청

return;

}


if((m_res = mysql_store_result(&mysql)) == NULL)

{ // 결과를 m_Res에 저장

return;

}


while((row = mysql_fetch_row(m_res)) != NULL)

{
                 // 출력창에 디버깅 용으로 

TRACE("mysql에 받은 값입니다 : %s %s \n", row[0], row[1]);

}