Programming/C, C++

[C/C++]MySQL을 C로 연동하는 소스

MB Brad KWON 2012. 8. 5. 08:46


dbError.h

mysql.c



 MySQL을 C로 연동해 보았다. 예전에 진자게 해본 것이지만 이번 기회에 라이브러리 처럼 정리해서 계속 사용하기 위해서 다시 한 번 만들어 봤다. 간단한 함수 몇개를 만들고 각 사항에 대한 에러코드를 만들었다.



1. dbError.h

 각 에러들이 기술되어있는 헤더파일이다. 이런 식으로 에러를 기술해 놓으면 어느 부분에서 에러가 났는지 찾기가 쉬워진다.


#define MB_RES unsigned int


#define MB_OK                                                           0x00000000


#define DB_INIT_ERROR                                           0xff000000

#define DB_CONNECTION_ERROR                         0xff000001

#define DB_QUERY_EXECUTION_ERROR             0xff000002

#define DB_FETCH_FAIL                                           0xff000003


#define DB_RESULT_NULL                                       0xff000004





2. mysql.c

 MySQL을 연동할 때, 사용할 간단한 역할의 함수들이 기술되어 있다.


#include <mysql/mysql.h>

#include <stdio.h>

#include "dbError.h"


MYSQL_RES *res;

MYSQL_ROW row;

MYSQL *conn;



void    errorLog(int err);

int     executeQuery(char *query);

int     fetchRow(void);

int     connectDB(void);

void    disconnectDB(void);

void    errorMsgDB(char *errMsg);


void main()

{

    MB_RES result;

    int rt = 0;

    

    if ((result = connectDB()) != MB_OK)

    {

        errorLog(result);

        return result;

    }

    

    if ((result = runQuery("select * from test_tbl")) != MB_OK)

    {

        errorLog(result);

        return result;

    }

    

    while ((row = mysql_fetch_row(res)) != NULL )

    {

        printf("%s   %s   %s", row[0], row[1], row[2]);

    }

    

    closeDB();

}


// 에러 메세지 출력

void errorLog(int err)

{

    fprintf(stderr, "error : %#10x\n", err);

}


// 쿼리 실행

int executeQuery(char *query)

{

    if(mysql_query(conn, query))

    {

        errorMsgDB("MySQL Query Excute failed");

        return DB_QUERY_EXECUTION_ERROR;

    }

    

    res = mysql_store_result(conn);

    return MB_OK;

}


// 로우 조회

int fetchRow(void)

{

    if(res)

    {

        row = mysql_fetch_row(res);

        if(!row)

        {

            errorMsgDB("MySQL Fetch failed");

            return DB_FETCH_FAIL;

        }

        return MB_OK;

    }

    errorMsgDB("MySQL Query Result Null");

    return DB_RESULT_NULL;

}


// DB 연결

int connectDB(void)

{

    char *server = "1xx.1xx.1xx.1xx";

    char *user = "user";

    char *password = "password";

    char *database = "database";

    

    conn = mysql_init(NULL);

    if (conn == NULL)

    {

        errorMsgDB("MySQL init fail");

        return DB_INIT_ERROR;

    }

    

    if(!mysql_real_connect(conn, server, user, password, database , 3306, (char *)NULL, 0))

    {

        errorMsgDB("MySQL connect fail");

        return DB_CONNECTION_ERROR;

    }

    return MB_OK;

    

}


// DB 연결 해제

void disconnectDB(void)

{

    if (res)

        mysql_free_result(res);

    mysql_close(conn);

}


// DB 에러 메세지 출력

void errorMsgDB(char *errMsg)

{

    printf("t%s",errMsg);

    printf("nntError Meassage : %sn", mysql_error(conn));

}