ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQLite3 기본 사용법
    프로그래밍 2012. 3. 30. 12:54

    SQLite3 다운로드 : http://sqlite.org/download.html

    SQLite3 라이센스Public Domain

    기본적으로 다운로드 받은 소스에서 sqlite3.c / sqlite3.h / sqlite3ext.h 만 프로젝트에 포함시키면 SQLite3 를 사용할 수 있다.

    SQLite3 의 장점. 작고, 설정 필요 없이 사용가능하고, 단일 파일에 모든 내용이 저장되며, 여러 플랫폼에서 하나의 db 파일을 사용할 수 있다.

    SQLite3 를 통해 작업중인 맵에디터에 리소스 관리 부분을 붙여보기 위해서 사용법을 익히는중..(@_@b) <>


    #include <stdio.h>
    #include <stdlib.h>
    
    #include "sqlite3/sqlite3.h"
    
    static int callback(void* notUse, int argc, char** argv, char** colName)
    {
    	// sql 구문에 의해서 명령어 처리시 사용되는 콜백함수.
    	// argc : 데이터 갯수.
    	// argv : 데이터 항목.
    	// colName : 데이터 항목의 분류명.
    
    	/*
    	 * 예제 db 테이블...
    	 * /'''''''' argc '''''''''\
    	 * +--------------+---------+
    	 * | char name(80)| int agc | <-- colName
    	 * +--------------+---------+
    	 * | 이름1        | 10      | <-- argv
    	 * | 이름11       | 20      |
    	 * +--------------+---------+
    	 */
    	for (int i = 0; i < argc; ++i)
    	{
    		printf("%s = %s\n", colName[i], argv[i] ? argv[i] : "(null)");
    	}
    
    	printf("\n");
    	return 0;
    }
    
    #define CHECK_QUIT(INFO, RET) \
    	if (ret != SQLITE_OK) { fprintf(stderr, "'%s' error\n", INFO); return RET; }
    #define CHECK(INFO) \
    	if (ret != SQLITE_OK) { fprintf(stderr, "'%s' error\n", INFO); }
    #define ERROR(INFO) \
    	fprintf(stderr, "%s : '%s'\n", INFO, sqlite3_errmsg(db));
    
    int main(int argc, char** argv)
    {
    	sqlite3* db;
    	char* errMsg = NULL;
    	char* filename = "test.db"; /// 해당 파일이 없는 경우 sqlite3_open 함수 호출시 빈 db 파일 생성.
    	char* createTableQuery = "create table test_table(name text(20), age int);";
    	char* insertDataQuery = "insert into test_table(name, age) values('이름', 10);";
    	char* requestTableQuery = "select * from test_table;";
    
    	int ret = sqlite3_open(argv[1], &db);
    
    	if (ret == SQLITE_OK)
    	{
    		/// 1. 테스트 테이블 생성
    		ret = sqlite3_exec(db, createTableQuery, callback, 0, &errMsg);
    		CHECK("createTableQuery");
    
    		/// 2. 테스트 테이블에 데이터 삽입
    		ret = sqlite3_exec(db, insertDataQuery, callback, 0, &errMsg);
    		CHECK("insertDataQuery");
    
    		/// 3. 테스트 테이블 요청
    		ret = sqlite3_exec(db, requestTableQuery, callback, 0, &errMsg);
    		CHECK("requestTableQuery");
    
    		/// 4. sqlite3_exe 함수와 callback 함수를 사용하지 않고 데이터 읽기. (3단계와 같은 동작)
    		{
    			sqlite3_stmt* stmt;
    
    			ret = sqlite3_exec(db, "BEGIN", 0, 0, 0);
    			CHECK("트랜잭션 걸기");
    
    			if (sqlite3_prepare(db, requestTableQuery, -1, &stmt, NULL) == SQLITE_OK)
    			{
    				while (sqlite3_step(stmt) == SQLITE_ROW)
    				{
    					/// windows 콘솔창에서 한글이 출력되지 않으면.. setlocale(LC_ALL, "") 함수를
    					/// 통해서 출력되도록 할 수 있다.
    					wprintf(L"name:%s, age:%s\n",
    							(char*)sqlite3_column_text(stmt, 0),
    							(char*)sqlite3_column_text(stmt, 1));
    				}
    			}
    			else
    			{
    				ERROR("에러");
    			}
    
    			ret = sqlite3_exec(db, "END", 0, 0, 0);
    			CHECK("트랜잭션 해제");
    
    			sqlite3_finalize(stmt);
    		}
    
    		sqlite3_close(db);
    	}
    	else
    	{
    		ERROR("데이터베이스 열기 실패");
    		sqlite3_close(db);
    		return -1;
    	}
    
    	return 0;
    }
    


Designed by Tistory.