본문 바로가기
프레임워크/MFC

[MFC] SQLite3연동하기 예제 포함(DB 생성, DB select)

by 연어바케트 2022. 7. 1.
반응형

1. MFC프로젝트 생성

 적당한 MFC 프로젝트를 생성한다. 

 

2.SQLite 사이트에서 파일 다운

 

SQLite Download Page

Templates (1) and (2) are used for source-code products. Template (1) is used for generic source-code products and templates (2) is used for source-code products that are generally only useful on unix-like platforms. Template (3) is used for precompiled bi

www.sqlite.org

자신의 프로젝트 환경에 맞는 파일들을 선택해서 다운로드 받는다. 

필자는 윈도우 x86 환경을 선택하였다. 

3. lib 파일 만들기

  •   2번에서 다운 받은 파일을 압축 해제를 한다. 

 

  • developer command promprt for vs2019를 실행 시킨다. 

  • 명령어 입력
    32bit : lib /def:sqlite3.def
    64bit : lib /def:sqlite3.def /machine:x64
    해당 명령어를 실행 시켜 lib 파일을 생성.

4. 프로젝트 라이브러리 설정

  • [프로젝트 속성] -> [링커] -> [입력] -> [추가종속성] 설정

  • [프로젝트 속성] -> [VC++ 디렉터리]->[라이브러리 디렉터리] lib 파일 위치 설정 
    or 
    프로젝트 폴더에 lib 첨부. 

5. sqlite3 사용하기 

  • sqlite3.h 인클루드 후 사용.

 

6.샘플코드 

  • DataBase Open

bool SqliteDB::openDB()
{
    int rc;
    CString str;

    rc = sqlite3_open("test.db", &db);
    if (SQLITE_OK != rc)
    {   
        return false;
    }
    MessageBoxW(nullptr, L"open DB", L"알림", MB_OK);
    return true;;
}

 

  • Create Table 실행
    sqlite3_exec를 이용하여 새로운 테이블 생성. 
bool SqliteDB::createTable()
{
    int rc;
    char* sql = "drop TABLE if EXISTS TRACEDATA; CREATE TABLE TRACEDATA(id INTEGER, string TEXT);";
    char* err_msg;
    rc = sqlite3_exec(this->db, sql, 0, 0, &err_msg);
    if (SQLITE_OK != rc)
    {
        MessageBoxW(nullptr, L"create Table", L"에러", MB_OK);
        sqlite3_free(err_msg);
        sqlite3_close(this->db);
        return false;
    }
    MessageBoxW(nullptr,L"create Table", L"알림", MB_OK);
    return true;
}

 
sqlite3_exec()

SQLITE_API int sqlite3_exec(
  sqlite3*,                                  /* An open database */
  const char *sql,                           /* SQL to be evaluated */
  int (*callback)(void*,int,char**,char**),  /* Callback function */
  void *,                                    /* 1st argument to callback */
  char **errmsg                              /* Error msg written here */
);

 

  • select 문 실행
    sqlite3_get_table을 이용하여 table정보를 가져온다. rows, columns 는 table의 row, column 갯수를 넘겨 받는다.
char** SqliteDB::selectDB(int &rows, int &columns )
{
	char* sql = "SELECT *FROM TRACEDATA";
	int rc;
	char* err;
	char** result = nullptr;
	rc = sqlite3_get_table(this->db, sql, &result, &rows, &columns, &err);
	if (rc != SQLITE_OK)
	{
		MessageBoxW(nullptr, L"select", L"에러", MB_OK);
        return nullptr;
	}
	return result;
}


sqlite3_get_table

SQLITE_API int sqlite3_get_table(
  sqlite3 *db,          /* An open database */
  const char *zSql,     /* SQL to be evaluated */
  char ***pazResult,    /* Results of the query */
  int *pnRow,           /* Number of result rows written here */
  int *pnColumn,        /* Number of result columns written here */
  char **pzErrmsg       /* Error msg written here */
);

 

7. Viewer

 

DB Browser for SQLite

DB Browser for SQLite The Official home of the DB Browser for SQLite Screenshot What it is DB Browser for SQLite (DB4S) is a high quality, visual, open source tool to create, design, and edit database files compatible with SQLite. DB4S is for users and dev

sqlitebrowser.org

해당 파일을 이용하면 쉽게 데이터 베이스를 확인할 수 있음.

반응형

댓글