2010년 1월 20일 수요일

MySql 과 C++ 연동

MYSQL 과 C++ 연동

1. MYSQL 설시시 아래 CIncdude Files /Lib Files 도 설치하도록 하자



2. MY SQL의 헤더파일 폴더과 라이브러리 폴더를 등록해준다.









































































3. MYSQL 홈피(http://dev.mysql.com)에 접속해서
downloads>connector > Connector 가서
Conector /C 부부관 Conector /C++를 받아서 설치한다.
이유는 MySQL의 함수 집합체인 DLL libmysql.dll 를 얻기위해서다.


4. 연동 코드

 
#define SOCKET int

#include <string.h>
#include <stdio.h>
#include <mysql.h>

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

#define DB_HOST "127.0.0.1"//"호스트IP, 도메인또는localhost"
#define DB_USER "root"
#define DB_PASS "2513"
#define DB_NAME "game"

#define SQL_CREATE_TABLE  "CREATE TABLE playerinfo(id INT AUTO_INCREMENT, name VARCHAR(30), xpos INT, PRIMARY KEY(id));"
#define SQL_INSERT_RECORD "INSERT INTO playerinfo VALUES \
(NULL , %s, %d);" //"
#define SQL_SELECT_RECORD "SELECT * FROM playerinfo"
#define SQL_DROP_TABLE "DROP TABLE playerinfo"



int main()
{
             MYSQL *connection=NULL, conn;
             MYSQL_RES *sql_result;
             MYSQL_ROW sql_row;
             int query_stat;
             int i;

             char query[255];

             mysql_init(&conn);

             // DB 연결
             connection = mysql_real_connect(&conn, DB_HOST,
                           DB_USER, DB_PASS,DB_NAME, 3306,(char *)NULL, 0);
             if(connection==NULL)
             {
                           fprintf(stderr, "Mysql connection error : %s", mysql_error(&conn));
                           return 1;
             }
            
             // 테이블삭제
             query_stat=mysql_query(connection,SQL_DROP_TABLE);
             if (query_stat != 0)
             {
                           fprintf(stderr, "Mysql query error : %s", mysql_error(&conn));
             //          return 1;
             }
            
             //한글사용을위해추가.
             mysql_query(connection,"set session character_set_connection=euckr;");
             mysql_query(connection,"set session character_set_results=euckr;");
             mysql_query(connection,"set session character_set_client=euckr;");

             //// 테이블생성
             query_stat=mysql_query(connection,SQL_CREATE_TABLE);
             if (query_stat != 0)
             {
                           cout<<"여기?"<<endl;
                           fprintf(stderr, "Mysql query error : %s", mysql_error(&conn));
                           return 1;
             }

             // 레코드삽입
             for(i=0;i<5;i++)
             {
                           sprintf(query,SQL_INSERT_RECORD,"'ㅁㅁㅁ'",100+i);
                           cout<<query<<endl;
                           query_stat = mysql_query(connection, query);
                          
                           if (query_stat != 0)
                           {
                                        cout<<"여기"<<endl;
                                        fprintf(stderr, "Mysql query error : %s", mysql_error(&conn));
                                        return 1;
                           }
             }

             // 셀렉트
             query_stat=mysql_query(connection,SQL_SELECT_RECORD);
             if (query_stat != 0)
             {
                           fprintf(stderr, "Mysql query error : %s", mysql_error(&conn));
                           return 1;
             }

             // 결과출력
             sql_result=mysql_store_result(connection);
             while((sql_row=mysql_fetch_row(sql_result))!=NULL)
             {
                           printf("%2s %2s %s\n",sql_row[0],sql_row[1],sql_row[2]);
             }
             mysql_free_result(sql_result);

             // 테이블삭제
             query_stat=mysql_query(connection,SQL_DROP_TABLE);
             if (query_stat != 0)
             {
                           fprintf(stderr, "Mysql query error : %s", mysql_error(&conn));
                           return 1;
             }

             // DB 연결닫기
             mysql_close(connection);
             return 0;
}


여기서 중요한 한가지 C++로 DB로 정보를 보낼때 한글를 재대로 보내기 위해서는
            //한글사용을위해추가.
             mysql_query(connection,"set session character_set_connection=euckr;");
             mysql_query(connection,"set session character_set_results=euckr;");
             mysql_query(connection,"set session character_set_client=euckr;");
이부분을 추가해줘야한다. 


댓글 1개:

  1. 하루 종일 한글 처리방법을 찾아서 구글링을 해댔는데, 여기에 와서
    방법을 찾았네요. 감사합니다..^^

    MySQL Connector/C++ 버전에서는 아래와 같이 하면 되네요.

    stmt = con->createStatement();
    stmt->execute("set session character_set_connection=euckr;");
    stmt->execute("set session character_set_results=euckr;");
    stmt->execute("set session character_set_client=euckr;");

    답글삭제