Programming/C, C++

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

MB Kyle K. 2012. 8. 5. 08:46



첨부파일
0.00MB

첨부파일
0.00MB






















 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));
}