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/)