컴퓨터 공학/C++

[C/C++] C++과 SQLite 연동하기

혼새미로 2016. 2. 29. 00:25
반응형

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 파일을 읽게 되니 주의 


반응형