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; }
'프로그래밍' 카테고리의 다른 글
nox에 실행중인 앱 디버그하기... (adb 접속) (0) | 2018.06.07 |
---|---|
안드로이드 인앱 정보 갱신이 안될때... (0) | 2018.05.17 |
스마트한 재배포를 위한 팁?! (0) | 2012.05.08 |
(임시) 의존성 문제였나!? 그 결과와 얻은 내용 정리. (0) | 2012.03.21 |
스마트한 재배포를 위한 한수... 라기 보다는 메모 ㅠㅠ (0) | 2012.03.21 |