Speichern einer In-Memory-Datenbank auf der Festplatte

Lesezeit: 2 Minuten

Ich habe eine Datenbank über SQLite in C++ erstellt.

Die Datenbank wurde im Speicher erstellt (unter Verwendung des Parameters „:memory:“ anstelle eines Dateinamens), um ein sehr schnelles Verhalten zu erzielen.

Die Datenbank wird durch die folgenden Zeilen erstellt:

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

Mein Problem ist: Wie kann ich die In-Memory-Datenbank auf die Festplatte schreiben? (über c/c++ natürlich).

Ich habe etwas über die SQLite-Befehle ATTACH und DETACH gelesen, aber ich kann sie nur mit der interaktiven SQLite-Shell zum Laufen bringen (nicht aus c/c++-Code).

Grüße.

Sehen Sie sich dieses Beispiel an: Laden und Speichern von In-Memory-Datenbanken

  • Ich suche C#-Dokumentation für den gleichen Zweck. bitte teilen wenn ihr es wisst.

    – Mubashar

    18. Januar 2011 um 5:45 Uhr

  • @Mubashar: Ich kenne mich mit C# nicht aus. Ich glaube, es ist einfach, das Beispiel in C# zu konvertieren. Das sqlite3_backup_X Funktionen erledigen die Arbeit.

    – Nick Dandoulakis

    18. Januar 2011 um 17:37 Uhr

  • Die Umleitung zur URL ist eine schlechte Antwort für Stackoverflow.

    – Iperov

    18. Oktober 2021 um 14:31 Uhr

Verwenden Sie die Transaktionsanweisung, bevor Sie irgendetwas mit der Tabelle tun. Dies gewährleistet auch eine schnelle Handhabung und Rollbacks. Auf diese Weise müssen Sie die Datenbank nicht direkt im Arbeitsspeicher implementieren.

Benutzer-Avatar
Toni Salimi

Wenn Sie nicht genug Zeit haben, um die gesamte Dokumentation zu lesen, die von @ NickDandoulakis ‘Antwort gepostet wurde, kopieren Sie einfach die folgende Funktion (bereits im Link erwähnt) und fügen Sie sie in Ihren Code ein:

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

und dann zum Speichern der Daten Ihrer SQLite-Datenbank (im Speicher) in eine Datei aufrufen:

loadOrSaveDb(db_con, target_file, 1);

Die db_con ist Ihr Datenbankverbindungsobjektzeiger und target_file ist die Zieldateiadresse.

Anmerkung: Wenn Sie eine SQLite-Datenbankdatei in den Speicher laden möchten, führen Sie einfach Folgendes aus:

loadOrSaveDb(db_con, target_file, 0);

1382160cookie-checkSpeichern einer In-Memory-Datenbank auf der Festplatte

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy