반응형
메모리 내 데이터베이스 디스크에 저장
저는 c++에서 sqlite를 통해 데이터베이스를 만들었습니다.
DB는 매우 빠른 동작을 위해 (파일 이름 대신 ":memory:" 매개 변수를 사용하여) 메모리에 생성되었습니다.
데이터베이스는 다음 행으로 작성됩니다.
sqlite3* mem_database;
if((SQLITE_OK == sqlite3_open(":memory:", &mem_database)){
// The db has been correctly created and
// I can do some stuff with it.
}
sqlite3_close(mem_database);
문제는 인메모리 데이터베이스를 디스크에 쓰는 방법입니다.(물론 c/c++를 통해).
ATTACH 및 DETTACH sqlite 명령어에 대한 내용을 읽었지만 sqlite 대화형 셸(c/c++ 코드가 아닌)에서만 작동할 수 있습니다.
인사드립니다.
인메모리 데이터베이스 로드 및 저장 예제를 확인합니다.
@Nick Dandoulakis의 답변에 의해 게시된 전체 문서를 읽을 충분한 시간이 없다면, 아래 기능(링크에서 이미 언급됨)을 코드에 복사하여 붙여넣기만 하면 됩니다.
int loadOrSaveDb(sqlite3 *pInMemory, const char *zFilename, 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(zFilename, &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);
return rc;
}
파일 호출에 SQLite DB의 데이터를 저장하려면 다음을 수행해야 합니다.
loadOrSaveDb(db_con, target_file, 1);
어떤.db_con
데이터베이스 연결 개체 포인터입니다.target_file
대상 파일 주소입니다.
비고: SQLite 데이터베이스 파일을 메모리에 로드하려면 다음을 실행하면 됩니다.
loadOrSaveDb(db_con, target_file, 0);
테이블에 작업을 수행하기 전에 트랜잭션 문을 사용합니다.이를 통해 빠른 핸들링과 롤백도 보장됩니다.이렇게 하면 데이터베이스를 메모리에 직접 구현할 필요가 없습니다.
언급URL : https://stackoverflow.com/questions/1437327/saving-to-disk-an-in-memory-database
반응형
'programing' 카테고리의 다른 글
도커 복사 및 소유자 변경 (0) | 2023.10.04 |
---|---|
Android studio 오류 "지원되지 않는 모듈이 탐지됨:다음 모듈에 대해서는 컴파일이 지원되지 않습니다." (0) | 2023.10.04 |
C 다차원 배열의 포인터 주소 (0) | 2023.10.04 |
연산자를 매개변수로 전달 (0) | 2023.10.04 |
스키마를 잃었습니다.rb!재생할 수 있습니까? (0) | 2023.10.04 |