2016-03-07 3 views
0

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

ответ

0

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

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

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

+0

Я знаю (как я описал, у него нет страниц), но какой должен быть вывод? Моя исходная база данных в памяти не пуста (прямо перед резервным копированием она создается с добавлением 1 таблицы, 5 столбцов и 500 строк), но резервная копия пустая: нет таблиц, нет данных. – nullptr

Смежные вопросы