티스토리 뷰

SQLite3 메모리DB, 인메모리

메모리DB 이용 시 파일명대신 :memory: 로 사용한다.
메모리DB를 파일DB로 혹은 그 반대로 백업할때는 sqlite3_backup... 을 사용한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#define _FromFile        0
#define _FromMem    1
void CDataDlg::OnBnClickedButton3()
{
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
    CString strDB파일명;
    CFileDialog dlg(TRUE, TEXT("db"), TEXT("*.db")); // 파일열기
    dlg.m_ofn.lpstrTitle = TEXT("SQLite DB 파일 열기");
    if (dlg.DoModal() == IDOK)
        strDB파일명 = dlg.GetPathName();
 
    sqlite3* pMemDB = NULL;
    char* pErr = NULL;
    char **results = NULL;
    int nResult = sqlite3_open(TEXT(":memory:"), &pMemDB); // 메모리로 지정
    if (nResult)
    {
        AfxMessageBox(TEXT("SQLite Memory DB 파일을 열지 못했습니다."));
        return;
    }
 
    DB백업(pMemDB, strDB파일명, _FromFile); // 파일에서 메모리로 백업
    DB백업(pMemDB, strDB파일명+ TEXT("-"), _FromMem); // 메모리에서 파일로 백업
    
    nResult = sqlite3_close(pMemDB);
    sqlite3_free(pErr);
}
 
void CDataDlg::DB백업(sqlite3 *pInMemory, CString strDB파일명, int isSave) 
{
     int rc;                   /* Function return code */
     sqlite3 *pFile;           /* Database connection opened on zFilename */
    sqlite3_backup *pBackup;  /* Backup object used to copy data */
    sqlite3 *pTo;             /* Database to copy to (pFile or pInMemory) */
    sqlite3 *pFrom;           /* Database to copy from (pFile or pInMemory) */
    
    rc = sqlite3_open(strDB파일명, &pFile);
    if (rc == SQLITE_OK) 
    {
        pFrom = (isSave ? pInMemory : pFile);
        pTo = (isSave ? pFile : pInMemory);
        pBackup = sqlite3_backup_init(pTo, "main", pFrom, "main");
        if (pBackup) 
        {
            (void)sqlite3_backup_step(pBackup, -1);
            (void)sqlite3_backup_finish(pBackup);
        }
        rc = sqlite3_errcode(pTo);
    }
    (void)sqlite3_close(pFile);
}
cs

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28