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));
}
'Programming > C, C++' 카테고리의 다른 글
[C/C++]함수 포인터 (0) | 2013.04.18 |
---|---|
[C/C++]전처리기 Pre-Processor (0) | 2013.04.18 |
[C/C++]연결 큐(Linked Queue) (0) | 2012.10.14 |
[C/C++]최대 히프, 최소 히프 (0) | 2012.10.14 |
[C/C++]C를 이용한 이진탐색트리 라이브러리 (0) | 2012.09.26 |