Thinking Different




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include "stdio.h"
#include "winsock2.h"
#include "mysql.h"
 
#pragma comment(lib, "libmysql.lib")
 
const char *host = "localhost";
const char *user = "root";
const char *pw = "*******";
const char *db = "bbs";
 
int _tmain(int argc, _TCHAR* argv[])
{
    MYSQL *connection = NULL;
    MYSQL conn;
    MYSQL_RES *sql_result;
    MYSQL_ROW sql_row;
 
    if(mysql_init(&conn) == NULL)
    {
        printf("mysql_init() error!");
    }
        
    connection = mysql_real_connect(&conn, host, user, pw, db, 3306, (const char*)NULL, 0);
    if(connection == NULL)    // 연결 에러 처리
    {
        printf("%d 에러 : %s, %d\n", mysql_errno(&conn), mysql_error(&conn));
        return 1;
    } 
    else
    {
        printf("연결 성공\n");    // 연결 성공 메시지 출력
 
        if(mysql_select_db(&conn, db))    // 데이터베이스 선택
        {
            printf("%d 에러 : %s, %d\n", mysql_errno(&conn), mysql_error(&conn));
            return 1;
        }
 
        char *query = "select *from korea";
        int state = 0;
 
        state = mysql_query(connection, query);
        if(state == 0)
        {
            sql_result = mysql_store_result(connection);            // Result Set에 저장
            while((sql_row = mysql_fetch_row(sql_result))!= NULL)    // Result Set에서 1개씩 배열에 가져옴
            {
                printf("%s %s %s %s\n",sql_row[0],sql_row[1],sql_row[2],sql_row[3]);    // 저장된 배열을 출력
            }
            mysql_free_result(sql_result);        // Result Set 해제한다
        }
        
        mysql_close(connection);        // db서버 종료
    }
 
    return 0;
}


간단한 접속 확인 및 테이블 출력을 해보았습니다. 실행 결과는 아래 화면입니다.

< 실행 성공시 출력 화면 >

< 실행 실패시 출력 화면 >

비교를 위해서 에러실행화면도 추가하였습니다. 에러메시지는 root 아이디를 roots로 바꿔서 에러메시지를 내게 출력한 결과입니다.

저는 위 실행 성공 화면에 보게 되면 몇개의 데이터값을 출력하는 것을 볼 수 있는데, 필자가 소스 실행전에 sql서버에 database 및 테이블을 생성후 값을 입력하였습니다.  

bbs라는 데이터베이스 생성, bbs에서 korea라는 테이블을 생성한 다음 간단하게
no int(10) auto_increment, id varchar(10), pw varchar(10), msg varchar(100)  으로 생성하여 값을 입력하엿습니다.

위와 같이 정상적으로 db에 저장된 데이터를 출력하는 것을 확인할 수 있습니다.
1
korea
1234
korea is good

잠깐!!!

#pragma comment(lib, "libmysql.lib") 이 뭐에요?

추가 종속 라이브러리 파일을 코드 구문에 바로 추가하는 것입니다. 보통 라이브러리를 추가할때 프로젝트 속성 내에서 링커에 추가되는 추가 종속성 라이브러리를 코드구문으로 바로 삽입할 수 있습니다.

소켓 프로그래밍을 위해서는 "winsock2.h" 헤더파일과 함께 "ws2_32.lib" 라이브러리를 추가하게 되는데 프로젝트 속성에서 추가해도 되고 위와 같이 소스구문 한줄로 추가해도 됩니다.