Saving to disk an in-memory database Saving to disk an in-memory database sqlite sqlite

Saving to disk an in-memory database


Use transaction statement before doing anything to the table. This ensures fast handling and rollbacks as well. This way, you don't need to implement the database in memory directly.


If you do not have enough time to read the whole documentation posted by @NickDandoulakis's answer, just copy and paste the below function (already mentioned in the link) in your code:

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;}

and then for saving the data of your SQLite db (in memory) into a file call:

loadOrSaveDb(db_con, target_file, 1);

Which db_con is your database connection object pointer and target_file is the target file address.

Remark: If you want to load a SQLite database file into memory, just run:

loadOrSaveDb(db_con, target_file, 0);