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 |