티스토리 뷰
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 |