본문 바로가기

Note..

c++ mysql


mysql server를 설치하면 c용 라이브러리를 추가로 설치할 수 있는데, 이 라이브러리를 이용하면 odbc를 사용하지 않아도 mysql에 c(c++)코드에서 연결할 수 있다.
(mysql은 여기서 다운받을 수 있다.)

개인적으로 odbc보단 이게 사용하기 쉬운것 같다.(성능이나 활용성 이런건 잘 모르겠고,, 현재 시점에선 이게 편하다.)

라이브러리까지 다 같이 설치하면 설치된 폴더에 include 폴더와 lib폴더가 들어있다.
이걸 visual studio에서 도구->옵션 윈도우를 켰을 때 왼쪽의 트리에서 프로젝트 및 솔루션->VC++ 디렉토리  에서 포함파일과 라이브러리 파일의 경로로 위의 include와 lib경로를 추가해주면 사용 준비는 끝이다.



아니면 include와 lib폴더의 모든 파일(이나 폴더)를 ~\Microsoft Visual Studio x.0\VC\include"  와 "~\lib" 에 쑤셔넣어도 된다.(이게 편하다..)

준비는 끝낫고, 실제로 코드상에서 사용해보자.


/*
libmysql.dll을 실행파일곁에 두어야된다..  아니면 정적컴파일을 하면 될것 같기도 한데 안해봤다.
(c:\program file\mysql\mysql server\lib 에 있음)
*/

//#define SOCKET int
//mysql 헤더파일 내부에서 SOCKET을 사용한다. 그래서 이걸 define해줘야 에러가 안나는데,
//이건 winsock2.h에 있으니 winsock2.h를 포함해도 되고, 그냥 SOCKET을 정의해도 된다.
#include<winsock2.h>
#include<iostream>
#include<string>
#include<stdio.h>
#include<mysql.h>

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

int main(){
 MYSQL *connection=NULL, conn;
 MYSQL_RES *sql_result;
 MYSQL_ROW sql_row;
 int query_stat;
 mysql_init(&conn);
 connection = mysql_real_connect(&conn, "127.0.0.1"  ,"root", "dbname","test", 3306, (char*)NULL, 0);
//포트는 sql서버 설치시 지정하게되는데, 그냥 넘기면 기본값이 3306이다.
 if(connection == NULL){
  printf("con error");
  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,
                           "CREATE TABLE user(key int not null auto_increment primary key, id varchar(20),pw varchar(30))"  );
 if (query_stat != 0)
 {
 printf("error : %s ", mysql_error(&conn));
 return 1;
 }

 // 쿼리:레코드삽입
  char query[255];
  sprintf(query,"insert into user(id, pw) values(\'testest\',\'1234\')");
  query_stat = mysql_query(connection, query);
  if(query_stat != 0){
   printf("error : %s", mysql_error(&conn));
   return 1;
  }

 // 쿼리:셀렉트
 query_stat=mysql_query(connection,"select id, pw from user");
 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("%s %s\n", sql_row[0], sql_row[1]);
 }
 mysql_free_result(sql_result);

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


함수만 살펴보면,
MYSQL* mysql_init(MYSQL* mysql);

MYSQL* mysql_real_connect(MYSQL* mysql, const char* host, const char* user, const char* passwd, const char* db, unsigned int port, const char* unix_socket, unsigned long clientflag);

int mysql_query(MYSQL* mysql, const char* q);

MYSQL_RES* mysql_store_result(MYSQL* mysql);

MYSQL_ROW mysql_fetch_row(MYSQL_RES* result);

void mysql_free_result(MYSQL_RES* result);

void mysql_close(MYSQL* mysql);

const char* mysql_error(MYSQL* mysql);

가 거의 주로 쓰이는거고, 이름만 봐도 뭐하는건지 알 수 있다.
(나머지는 mysql.h 속에보면 다 나오는데, 쓸일은 없어보이는것들 뿐이다.)

'Note..' 카테고리의 다른 글

무료 게임엔진 - irrlicht  (0) 2012.02.26
mysqldump  (0) 2012.02.18
A* algorithm  (0) 2012.02.07
Windows Installer  (0) 2012.01.31
Windows.SystemColors  (0) 2012.01.20