SQLite C++연동 방법


어플리케이션을 개발하다보면 로컬에 자료를 저장할 필요성이 발생하는 경우가 있습니다.

단순하게 ini 나  레지스트리 수준으로 저장할 분량이라면 문제가 안되겠지만

좀더 양이 방대해졌을 경우 예를 들어 음악파일 리스트 같은 들어보면 단순하게

이정보를 파일 형태로 저장하기 보다는 데이타베이스로 저장할 필요성이 생기게 됩니다.

 

그렇다고 어플리케이션용 데이타 베이스로 MSSQL 이나 오라클 같은 엔터프라이즈급 데이타베이스를

쓸 수는 없는 상황이구요.

이런 용도에 가장 많이 쓰이는 데이타베이스가 SQLite 입니다. (sqlite 공식
홈페이지 🙂

 

금번 강좌는 어플리케이션에서 널리 사용되는 SQLite 에 대해 간단한 테이블 생성법, 그리고C++ 로 개발되는

어플리케이션에서 데이터를 불러오고 데이타를 갱신하는 방법에 대해 설명 드리고자 합니다.

 

1> SQLitSpy 프로그램 사용하기

SQLite 전용으로 사용되는 freeware 로 SQLiteSpy.exe 라는 프로그램이
있습니다.

아래 이미지를 보시면 아시겠지만 비 상업적 용도나 교육용으로 사용될때는 별로의 라이센스fee 없이 사용이 가능한 버전입니다.

첨부된 압축 파일을 다운받으시면 프로그램을 보실 수가 있습니다.

 

 

아래 이미지와 같이 SQLiteSpy 프로그램 실행 후 New Database 메뉴를 클릭하여

db 파일을 생성합니다.

참고로 전 SQLiteExam 이란 다이얼로그베이스 어플리케이션을 만들고 sample.db 파일을 생성했습니다.

 

 

 

테이블을 하나 만들어 보겠습니다.

 

– 생성한 sample.db 파일을 open 합니다.

 

-Execute -> Execute SQL 로 아래의 SQL 을 실행합니다.

CREATE TABLE sample_product (product_code
TEXT ,
product_name TEXT,
Update_dates DATE)

 

sample_product 란 테이블을 생성합니다.

 

 

성공적으로 테이블이 생성됨을 확인합니다.

 

 

기본적인 SQL 구문에 대해서는 아래 링크를 참조하시기 바랍니다.

 

 

2>C++과 연동하기

– CppSQLite3U.cpp , CppSQLite3U.h, sqlite3.h 를 프로젝트에 추가합니다.

  *공개된 Open 소스로 Wrapper Class 역할을 합니다.

 

 

-sqlite3.lib 참조를 추가합니다.

 

-SQLiteExamDlg.h 에 헤더파일(CppSQLite3U.h)을 include
시키며 멤버 변수(CppSQLite3DB m_DB)를 선언합니다.

동적으로 함수 두개(입력 ,조회)를 생성합니다.

 

 

– OnInitDilaog 에서 DB 오픈하며, 입력 조회 부분의 함수를 아래와 같이 구현합니다.

 

#include “stdafx.h”
#include “SQLiteExam.h”
#include
“SQLiteExamDlg.h”
#include

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

#define
MAIN_DB_FILE_NAME       _T(“sample.db”)

중략….

 

BOOL CSQLiteExamDlg::OnInitDialog()
{
 CDialog::OnInitDialog();

 // Add “About…” menu item to system menu.

 // IDM_ABOUTBOX must be in the system command
range.
 ASSERT((IDM_ABOUTBOX & 0xFFF0) ==
IDM_ABOUTBOX);
 ASSERT(IDM_ABOUTBOX < 0xF000);

 CMenu* pSysMenu = GetSystemMenu(FALSE);
 if (pSysMenu !=
NULL)
 {
  CString
strAboutMenu;
  strAboutMenu.LoadString(IDS_ABOUTBOX);
  if
(!strAboutMenu.IsEmpty())
  {
   pSysMenu->AppendMenu(MF_SEPARATOR);
   pSysMenu->AppendMenu(MF_STRING,
IDM_ABOUTBOX, strAboutMenu);
  }
 }

 // Set the icon for this dialog.  The framework does this
automatically
 //  when the application’s main window is not a
dialog
 SetIcon(m_hIcon, TRUE);   // Set big icon
 SetIcon(m_hIcon,
FALSE);  // Set small icon

 // TODO: Add extra initialization here
 

//DB 파일을 여는 부분입니다
 CString
sDBFilePath;
 sDBFilePath.Format(_T(“%s”),
MAIN_DB_FILE_NAME);
 
 m_DB.open(sDBFilePath);

 return TRUE;  // return TRUE  unless you set the focus to a control
}

 

//insert 구문 예제 부분입니다

void CSQLiteExamDlg::OnBnClickedInput()
{  
  //제품 코드를 입력합니다.

  //난수를 발생시켜 문자열화 한후 입력하는 예제입니다
  int pCode = rand();
  CString
pProduct_code,sQuery;
 
  pProduct_code.Format(_T(“%d”),pCode);
 
  sQuery.Format(_T(“INSERT
INTO sample_product (product_code, product_name, update_dates) VALUES (
‘%s’,’aaaaa’,current_timestamp)”),pProduct_code);

 
  m_DB.execQuery(sQuery);

 // TODO: Add your control notification handler code here
}

 

//select  구문 예제 부분입니다

void CSQLiteExamDlg::OnBnClickedSelect()
{
 CString sQuery;

 //전체 제품 갯수를 가져옴
 sQuery =  _T(“SELECT count(*) FROM sample_product”);

 CppSQLite3Query pCountSql = m_DB.execQuery(sQuery);
 while( !
pCountSql.eof() )
 {
  CString sCount = 
pCountSql.fieldValue(0);
 
   pCountSql.nextRow();
 }
 
  //
TODO: Add your control notification handler code here
}

 

-입력 결과를 SQLiteSpy 프로그램에서 확인합니다.

 

 

이상입니다.

http://kin.naver.com/open100/detail.nhn?d1id=1&dirId=1040101&docId=914616&qb=U1FMaXRl&enc=utf8&section=kin&rank=3&sort=0&spq=0&pid=f2v1Udoi5Ussss794vosss–313273&sid=S2DlDMnFYEsAAEO4Neo


답글 남기기

이메일 주소는 공개되지 않습니다.