노무현 대통령 배너


2007. 7. 12. 18:19

SQLite 간단 사용법

SQLite는 오픈소스 파일 DB입니다. API도 간단해서 쉽게 사용할 수 있습니다.
SQLite를 간단하게 설치(?)하고 CppSQLite라는 래퍼 클래스를 이용하여 제어하는 방법을 제공합니다.

다운로드
- SQLite 다운로드 : http://www.sqlite.org/download.html 에서 최신버젼(현재 sqlite-3_4_0.zip)을 받아서 압축 해제하면 exe파일이 하나 나옵니다. 설치파일은 아니니 그냥 압축해제만 해놓으시면 됩니다.
- CppSQLite 다운로드 : http://www.codeproject.com/database/CppSQLite.asp 에서 최신 버젼(현재 3.0.8)을 받습니다. 압축해제하면 나오는 폴더중에 Common 폴더만 프로젝트 폴더로 복사합니다.


사용준비
- 프로젝트를 생성하시고 Common폴더에 있는 CppSQLite.h/cpp를 추가합니다
- sqlite3.lib를 라이브러리에 추가합니다.(추가 라이브러리 디렉토리로 Common 추가)
- sqlite3.dll를 프로젝트 폴더에 복사
- #include "CppSQLite.h"하면 준비완료.

샘플코드
// DB파일 지정
const char* dbfile = "test.db";

// 메모리 DB
//const char* dbfile = ":memory:";

int dbRet = -1;
CppSQLite3DB db;

db.open(dbfile);

// 테이블 생성
dbRet = db.execDML("CREATE TABLE tbl_Account(Serial int NOT NULL, Account varchar(32), Grade smallint );");

// 데이터 INSERT
char query[256] = {0,};
for (int i=0; i<10; i++)
{
sprintf(query, "INSERT INTO tbl_Account(Serial, Account, Grade) Values(%d, 'dummy%d', 1);", i, i);
dbRet = db.execDML(query);
}

// 데이터 SELECT
CppSQLite3Query q = db.execQuery("SELECT Serial, Account, Grade FROM tbl_Account");
while (!q.eof())
{
cout << q.fieldValue(0) << " | ";
cout << q.fieldValue(1) << " | ";
cout << q.fieldValue(2) << " | " << endl;
q.nextRow();
}

db.close();

추가사항
- SQLite는 파일하나가 Database 하나 입니다. 물론 테이블은 다수 들어갑니다.
- db.open 에서 인자를 파일이름으로 주면 파일DB가 되고 주석처리된 부분처럼 :memory: 로 주면 메모리DB가 됩니다.
- db.execDML에서 리턴되는 값은 영향을 받은 row개수 입니다.
- 쿼리가 실패하면 CppSQLite3Exception이 throw 됩니다. 이 처리 방식이 마음에 들지 않으시면 CppSQLite.cpp의 CppSQLite3DB::execDML 함수를 보시면 SQLITE_OK가 아니면 exception을 throw하는 부분이 있는데 이부분을 return ERROR_CODE 하시면 됩니다.
- q.fieldValue 함수는 문자형(char*)으로 결과값을 리턴하므로 그외 자료형은 atol 등의 함수로 변환해서 사용하시면 됩니다.
- 쿼리를 직접 날리시려면 아까 다운받은 sqlite3.exe를 사용하시면 되는데 커맨드창에서 sqlite3.exe db파일(test.db) 하시면 직접 쿼리가 가능합니다. GUI를 제공하는 툴도 있습니다. (http://www.yunqa.de/delphi/sqlitespy/)

'프로그래밍 > Database' 카테고리의 다른 글

ERD 그리는 프로그램  (0) 2008.06.01
Berkeley DB 시작하기  (0) 2007.07.12
Sqlite 프로그래밍  (0) 2006.09.20