=======================
=======================
=======================
어플리케이션을 개발하다보면 로컬에 자료를 저장할 필요성이 발생하는 경우가 있습니다.
단순하게 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§ion=kin&rank=3&sort=0&spq=0&pid=f2v1Udoi5Ussss794vosss--313273&sid=S2DlDMnFYEsAAEO4Neo
=======================
=======================
=======================
'프로그래밍 관련 > DB SQL' 카테고리의 다른 글
SQL Select 갯수 제한 또는 설정 관련 (0) | 2012.06.15 |
---|---|
SQLite - 파일 용량 관련(관리,줄이기)(auto_vacuum) (0) | 2011.06.21 |
ADO(ActiveX Data Object) - CONNECTION객체 (0) | 2011.02.09 |
사내 공통 DB 서버 mssql , ADO 연결시 80004005에러코드 문제점(WIN NT계열아니면 많이 일어남) (0) | 2011.02.09 |
DB 연결 (0) | 2011.01.26 |