SQLite는 오픈소스 파일 DB입니다. API도 간단해서 쉽게 사용할 수 있습니다.
SQLite를 간단하게 설치하고 CppSQLite라는 래퍼 클래스를 이용하여 제어하는 방법을 제공합니다.
다운로드
- SQLite 다운로드 : http://www.sqlite.org/download.html 에서 최신버젼을 받아서 압축 해제하면 exe파일이 하나 나옵니다. 설치파일은 아니니 그냥 압축해제만 해놓으시면 됩니다.
- CppSQLite 다운로드 : http://www.codeproject.com/database/CppSQLite.asp 에서 최신 버젼을 받습니다. 압축해제하면 나오는 폴더중에 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();
}
q.finalize();
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/)
출처 : http://javawork.egloos.com/1812306
PS.
프로젝트 작성 후 DB 경로 설정 시 아무런 경로를 지정하지 않고 파일이름만 입력하게 되면 실제 DB 경로는 debug 폴더가 아닌 프로젝트 dsw 파일이 위치한 경로에서 DB 파일을 읽게 되니 주의
'컴퓨터 공학 > C++' 카테고리의 다른 글
데이터의 분포를 출력하는 소스 코드 (C언어) (0) | 2017.06.02 |
---|---|
C언어 - int형의 정규분포를 취하는 난수 값 생성 및 배열에 저장하기 소스 코드 (0) | 2017.04.18 |
C언어로 파워볼 당첨 시뮬레이터 만들기 (0) | 2016.01.14 |
[C언어]파일 입출력 - 사용자 추가, 수정, 검색, 출력하기 (1) | 2015.12.07 |
[공유] 씹어먹는 C 언어 - <24. 더 빠르게 실행되는 코드를 위하여 (C 코드 최적화)> (0) | 2015.11.27 |