переполнение стека базы данных sqlite

я хочу иметь некоторую базу данных 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);
}

0

Решение

В базе данных в памяти нет страниц, потому что она пуста.

Прикрепленная база данных остается отдельной, то есть ее данные не объединяются в резервную копию.

Чтобы сделать резервную копию подключенной БД, вы должны дать ее имя (а не «главное») sqlite3_backup_init(),

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector