포럼 회원으로 등록하신분만 다운로드가 가능합니다. 최대 업로드 가능한 용량은 1GB 입니다.

SQLite 를 사용하다 보면 임베디드 시스템에서도 데이터베이스를 쓸수 있다는 사실에 가끔씩 스스로도 놀라게 됩니다.

gdbm이나 기타 SQL을 사용하지 않는 파일형태의 데이터 저장방법을 사용하고 있다면 지금 당장 SQLite프로그램으로 바꾸시기 바랍니다.

SQL 구문 몇개만 알고 있으면 C 프로그래밍으로 데이터의 저장, 검색 처리를 임베디드 시스템에서도 멋지게 해낼수 있습니다.

임베디드 장비의 환경설정 파일, 발생되는 데이터 내용, PDA의 주소록, 일정관리 프로그램등을 손쉽게 만들어 낼수 있습니다.

다음의 예제를 한번 따라서 컴파일 해보세요.

내용은 별것 아닙니다. 주소에 해당하는 스트링을 인자값으로 넘겨주면 그에 해당하는 우편번호와 주소지를 출력해줍니다.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "sqlite3.h"

int main(int argc, char* argv[])
{
    sqlite3 *db;

    char **pResult;
    int nrow, ncol, i, j, k;
    char *errmsg = 0;
    char *query;
    int rc = 0;
    size_t len=0;

    if(argc != 2)
    {
        fprintf(stderr, "검색할 주소를 입력하세요. 예) ./post_search 가산동n");
        return 0;
    }

    rc = sqlite3_open("./POST.DB", &db);
    if(rc)
    {
        fprintf(stderr, "Can't open database: %sn", sqlite3_errmsg(db));
        sqlite3_close(db);
        return 1;
    }

    // Calculate Query length.
    len = snprintf(NULL, 0, "select post_no as 우편번호, address as 주소 from post_number where address like'%%%s%%';", argv[1]);

    // 메모리 할당
    query = malloc(len + 1);

    sprintf(query, "select post_no as 우편번호, address as 주소 from post_number where address like'%%%s%%';", argv[1]);

    if(!query)
    {
        fprintf(stderr, "Can't find Query !");
        return 0;
    }

    rc = sqlite3_get_table(db, query, &pResult, &nrow, &ncol, &errmsg);
    // 메모리 해제
    free(query);

    if(rc == SQLITE_OK)
    {
        k = 0;
        for(i=0;i< nrow+1;++i) // nrow+1 : because print column name
        {
            for(j=0;j<ncol;++j)
            {
                printf("%s |", pResult[k++]);
            }
            printf("n");
        }
    }
    else
    {
        printf("SQLite Error : %sn", errmsg);
    }

    sqlite3_free_table(pResult);
    sqlite3_close(db);

    return rc;
}

$ gcc -g -Wall -c post_search.c -I/home/embryo/sqlite_example/include
$ gcc -g -Wall -o post_search post_search.o -L/home/embryo/sqlite_example/lib -lsqlite3

소스코드는 post_search.c 실행파일 이름은 post_search 로 지정합니다. 우편번호 데이터가 들어 있는 파일은 POST.DB 라는 파일로 첨부했습니다.

컴파일 옵션 설명
---------------
-g 디버깅 정보를 넣으라는 옵션
-I (대문자 i)는 헤더파일의 위치를 지정
-Wall 컴파일할때 모든 경고 메세지를 출력
-c 컴파일 옵션
-o 생성되는 파일 지정
-L 라이브러리 경로 지정
-lsqlite3  -L 옵션으로 지정한 경로에 libsqlite로 시작하는 공유라이브러리를 링크라하는 옵션

실행방법
--------
$ ./post_search 가산
우편번호 |주소 |
469-841 |경기 여주군 대신면 가산리 |
467-861 |경기 이천시 부발읍 가산리 |
487-810 |경기 포천시 가산면 |
487-811 |경기 포천시 가산면 가산리 |
487-812 |경기 포천시 가산면 감암리 |
487-813 |경기 포천시 가산면 금현리 |
487-812 |경기 포천시 가산면 마산리 |
487-812 |경기 포천시 가산면 마전리 |
487-811 |경기 포천시 가산면 방축리 |
487-813 |경기 포천시 가산면 우금리 |
487-813 |경기 포천시 가산면 정교리 |
621-871 |경남 김해시 한림면 가산리 |
627-851 |경남 밀양시 부북면 가산리 |
664-811 |경남 사천시 축동면 가산리 |
626-821 |경남 양산시 동면 가산리 |
660-871 |경남 진주시 이반성면 가산리 |
678-871 |경남 합천군 묘산면 가산리 |
730-861 |경북 구미시 도개면 가산리 |
766-871 |경북 영덕군 창수면 가산리 |
769-861 |경북 의성군 가음면 가산1리 |
769-862 |경북 의성군 가음면 가산2리 |
769-861 |경북 의성군 가음면 가산3리 |
769-861 |경북 의성군 가음면 가산4리 |
769-861 |경북 의성군 가음면 가산리 |
718-910 |경북 칠곡군 가산면 |
718-911 |경북 칠곡군 가산면 가산리 |
718-912 |경북 칠곡군 가산면 금화리 |
718-912 |경북 칠곡군 가산면 다부리 |
718-913 |경북 칠곡군 가산면 석우리 |
718-911 |경북 칠곡군 가산면 송학리 |
718-913 |경북 칠곡군 가산면 심곡리 |
718-911 |경북 칠곡군 가산면 용수리 |
718-911 |경북 칠곡군 가산면 응추리 |
718-912 |경북 칠곡군 가산면 천평리 |
718-912 |경북 칠곡군 가산면 학산리 |
718-913 |경북 칠곡군 가산면 학상리 |
718-913 |경북 칠곡군 가산면 학하리 |
153-023 |서울 금천구 가산동 |
153-800 |서울 금천구 가산동 4~43 |
153-801 |서울 금천구 가산동 44~239 |
153-802 |서울 금천구 가산동 316~356 |
153-803 |서울 금천구 가산동 371~716 |
153-804 |서울 금천구 가산동 769~772 |
153-710 |서울 금천구 가산동 수출2공단 |
153-754 |서울 금천구 가산동 두산아파트 |
153-773 |서울 금천구 가산동 SK트윈테크타워 |
153-770 |서울 금천구 가산동 코오롱테크노밸리 |
153-771 |서울 금천구 가산동 대륭테크노타워1차 |
153-771 |서울 금천구 가산동 대륭테크노타워2차 |
153-772 |서울 금천구 가산동 대륭테크노타워3차 |
153-774 |서울 금천구 가산동 대륭테크노타워5차 |
153-774 |서울 금천구 가산동 대륭테크노타워6차 |
153-774 |서울 금천구 가산동 대륭테크노타워7차 |
153-775 |서울 금천구 가산동 대륭테크노타워8차 |
153-768 |서울 금천구 가산동 IT캐슬 |
153-777 |서울 금천구 가산동 스타밸리 |
153-779 |서울 금천구 가산동 뉴티캐슬 |
153-769 |서울 금천구 가산동 SJ테크노빌 |
153-790 |서울 금천구 가산동 삼성리더스타워 |
153-759 |서울 금천구 가산동 월드메르디앙2차 |
153-781 |서울 금천구 가산동 월드메르디앙1차 |
153-787 |서울 금천구 가산동 우림라이언스2차 |
153-786 |서울 금천구 가산동 우림라이온스밸리 |
153-783 |서울 금천구 가산동 벽산디지털2차밸리 |
153-789 |서울 금천구 가산동 에이스테크노타워10차 |
153-782 |서울 금천구 가산동 남성프라자(에이스9차) |
517-801 |전남 담양군 담양읍 가산리 |
535-881 |전남 신안군 비금면 가산리 |
590-831 |전북 남원시 운봉읍 가산리 |
314-811 |충남 공주시 의당면 가산리 |
336-891 |충남 아산시 선장면 가산리 |
330-821 |충남 천안시 입장면 가산리 |
350-821 |충남 홍성군 금마면 가산리 |
395-861 |충북 단양군 단성면 가산리 |
365-801 |충북 진천군 진천읍 가산리 |
363-841 |충북 청원군 남일면 가산리 |

윤승환

2008.11.19 01:22:42
*.78.49.252

sqlite로 mysql dbms와 비슷하게 만든 국내 프로젝트도 있던데요..
2006년 이후로 업데이트가 되지 않고 있는거 같네요...
기존의 dbms사용에 익숙하신 분들은 참고하실만 할꺼 같습니다.
위치는
http://sqlitedbms.sourceforge.net/index.htm 입니다.
List of Articles
번호 제목 글쓴이 날짜 조회 수

사용자 로그인