관리 메뉴

HeBhy, since 1983.

WINAPI - Mysql 연결과 간단한 쿼리 본문

Dev/Dev basics

WINAPI - Mysql 연결과 간단한 쿼리

HeBhy 2008. 8. 7. 06:14
// WINAPI 상에서 ODBC 없이 Mysql 라이브러리로 바로 DB연결.
// 아래는 보통 stdafx.h에 포함.
// Mysql Server 5.1 이상 설치되어 있어야 함(설치시 옵션에서 Include/lib 포함 체크)
// 위 프로그램의 bin 폴더의 libmysql.dll 필요.

#pragma comment(lib, "libmysql.lib")
#pragma comment(lib, "ws2_32.lib")
#include <stdio.h>
#include <winsock2.h>
#include <mysql.h>

#define DB_HOST "127.0.0.1"
#define DB_USER "root"
#define DB_PASS "1234"
#define DB_NAME  "test"

#define SQL_CREATE_TABLE "CREATE TABLE `mysql_api_test` (\
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,\
    `num` INT NULL ,\
    `string` VARCHAR( 20 ) NULL \
    ) TYPE = MYISAM ;" //"
#define SQL_INSERT_RECORD "INSERT INTO `mysql_api_test` ( `id` , `num` , `string` ) \
    VALUES (\
    NULL , '%d', '%s'\
    );" //"
#define SQL_SELECT_RECORD "SELECT * FROM `mysql_api_test`"
#define SQL_DROP_TABLE "DROP TABLE `mysql_api_test`"


int DBConn()
{

    MYSQL *connection=NULL, conn;
    MYSQL_RES *sql_result;
    MYSQL_ROW sql_row;
    int query_stat;
    int i;

    char query[255];
    TCHAR msg[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)
    {
        wsprintf(msg, (LPCWSTR)"Mysql connection error : %s", mysql_error(&conn));
        MessageBox(g_hWnd, msg, TEXT("1"), MB_OK);
        return 1;
    }

    // 테이블 생성
    query_stat=mysql_query(connection, SQL_CREATE_TABLE);
    if (query_stat != 0)
    {
        wsprintf(msg, (LPCWSTR)"Mysql query error : %s", mysql_error(&conn));
        MessageBox(g_hWnd, msg, TEXT("2"), MB_OK);
        return 1;
    }

    // 레코드 삽입
    for(i=0;i<5;i++)
    {
        sprintf_s(query, 255, SQL_INSERT_RECORD, 100+i, TEXT("아놔 ㅋㅋ"));
        query_stat = mysql_query(connection, query);
        if (query_stat != 0)
        {
            wsprintf(msg, (LPCWSTR)"Mysql query error : %s", mysql_error(&conn));
            MessageBox(g_hWnd, msg, TEXT("3"), MB_OK);
            return 1;
        }
    }

    // 셀렉트
    query_stat=mysql_query(connection,SQL_SELECT_RECORD);
    if (query_stat != 0)
    {
        wsprintf(msg, (LPCWSTR)"Mysql query error : %s", mysql_error(&conn));
        MessageBox(g_hWnd, msg, TEXT("4"), MB_OK);
        return 1;
    }

    // 결과 출력
    sql_result=mysql_store_result(connection);
    while((sql_row=mysql_fetch_row(sql_result))!=NULL)
    {
        wsprintf(msg, (LPCWSTR)"%2s %2s %s\n",sql_row[0],sql_row[1],sql_row[2]);
        //MessageBox(g_hWnd, msg, TEXT("5"), MB_OK);
    }
    mysql_free_result(sql_result);

    // 테이블 삭제
    query_stat=mysql_query(connection,SQL_DROP_TABLE);
    if (query_stat != 0)
    {
        wsprintf(msg, (LPCWSTR)"Mysql query error : %s", mysql_error(&conn));
        MessageBox(g_hWnd, msg, TEXT("6"), MB_OK);
        return 1;
    }

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

}
Comments