Я хочу иметь базу данных sqlite, работающую в памяти.sqlite резервная база данных памяти C++
Я могу загрузить базу данных на основе файлов в базу данных памяти, Я могу сделать резервную копию файловой базы данных, но то, что не удается, резервное копирование базы данных памяти в файл.
Я проверил оба образца, выставленные здесь: https://www.sqlite.org/backup.html
Я имею в виду, я использовал эти примеры. Результат всегда SQLITE_OK на всех SQLITE вызовов функций, execept 101 для
sqlite3_backup_step
во 2-м примере. Чтобы убедиться, что нет ошибки, я проверил базу данных памяти с таблицами и данными. В этом случае. Также, используя ту же функцию резервного копирования, очень хорошо работает для filedatabase.
До сих пор я мог исследовать, эту линию
nSrcPage = (int)sqlite3BtreeLastPage(p->pSrc);
в функции
sqlite3_backup_step (sqlite3.c)
всегда возвращает 0. Таким образом, база данных не имеет "страниц".
База данных на базе файлов возвращает 35 на данный момент.
Так что, похоже, нет никакой копии, потому что нет «страниц» для моей базы данных памяти; но в этой базе данных есть таблицы и данные.
/// 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);
}
Я знаю (как я описал, у него нет страниц), но какой должен быть вывод? Моя исходная база данных в памяти не пуста (прямо перед резервным копированием она создается с добавлением 1 таблицы, 5 столбцов и 500 строк), но резервная копия пустая: нет таблиц, нет данных. – nullptr