簡體   English   中英

將內存數據庫保存到磁盤

[英]Saving to disk an in-memory database

我在 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 和 DETACH sqlite 命令的內容,但我只能讓它們與 sqlite 交互式 shell 一起工作(而不是來自 c/c++ 代碼)。

問候。

看看這個例子:加載和保存內存數據庫

在對表執行任何操作之前使用事務語句。 這也確保了快速處理和回滾。 這樣,您就不需要直接在內存中實現數據庫。

如果您沒有足夠的時間閱讀@NickDandoulakis 的回答發布的整個文檔,只需將以下函數(已在鏈接中提到)復制並粘貼到您的代碼中:

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 數據庫的數據(在內存中)保存到文件調用中:

loadOrSaveDb(db_con, target_file, 1);

其中db_con是你的數據庫連接對象指針, target_file是目標文件地址。

備注:如果要將 SQLite 數據庫文件加載到內存中,只需運行:

loadOrSaveDb(db_con, target_file, 0);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM