я хочу иметь некоторую базу данных sqlite, работающую в памяти.
Я могу загрузить файловую базу данных в базу данных памяти,
я могу сделать резервную копию файловой базы данных, но что не получается
резервное копирование базы данных памяти в файл.
Я проверил оба образца, выставленные здесь:
https://www.sqlite.org/backup.html
Я имею в виду, я использовал эти примеры.
Результат всегда SQLITE_OK для всех вызовов функции sqlite, кроме 101
за
sqlite3_backup_step
во 2-м примере. Чтобы убедиться, что нет ошибок, я проверил базу данных памяти, имеющую таблицы
и данные. В этом случае. Также, используя ту же функцию резервного копирования, очень хорошо работает с файловой базой данных.
Пока что я могу исследовать эту линию
nSrcPage = (int)sqlite3BtreeLastPage(p->pSrc);
в функции
sqlite3_backup_step (sqlite3.c)
всегда возвращает 0. Таким образом, в базе данных нет «страниц».
Файловая база данных возвращает 35 в этот момент.
Так что, похоже, нет никакой копии, потому что для моей базы данных памяти не указано «страниц»; но эта база данных MEM определенно имеет таблицы
и данные.
/// failing backup
bool backup_test_sqlite_mem2(void)
{
/// create a file db
sqlite3* file_db =create_db("filedb.db",true);
if(file_db != nullptr)
sqlite3_close(file_db);
/// we now have a database file
/// create an empty mem db
sqlite3* mem_db=create_db(":memory:",false);
/// attached prior created file to mem db
attach_db_test_sqlite_mem(mem_db,"filedb.db");
/// check we have content in mem db
do_select(mem_db, "SELECT count(*) FROM stock","rows in backup_test_sqlite_mem2");
/// finally back memdb
int ibackup= backupDb(mem_db,"memdb_from_attached_backup.db",nullptr);
/// the above backup is empty
return (ibackup == SQLITE_OK ? true : false);
}
В базе данных в памяти нет страниц, потому что она пуста.
Прикрепленная база данных остается отдельной, то есть ее данные не объединяются в резервную копию.
Чтобы сделать резервную копию подключенной БД, вы должны дать ее имя (а не «главное») sqlite3_backup_init()
,
Других решений пока нет …