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