sqlite备份内存数据库c ++

时间:2016-03-07 00:49:20

标签: c++ sqlite backup in-memory

我想在内存中运行一些sqlite数据库。

我可以将基于文件的数据库加载到内存数据库中, 我可以备份基于文件的数据库,但失败的是 将内存数据库备份到文件。

我检查了两个样本,在这里曝光: https://www.sqlite.org/backup.html

我的意思是,我使用了这些例子。 所有sqlite函数调用的结果总是SQLITE_OK,不包括101 对

sqlite3_backup_step

在第二个例子中。为了确保没有错误,我检查了具有表格的内存数据库 和数据。情况就是这样。此外,使用相同的备份功能,非常适用于文件库。

到目前为止,我可以调查,这一行

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

1 个答案:

答案 0 :(得分:0)

内存数据库没有页面,因为它是空的。

附加数据库保持独立,即其数据未合并到备份中。

要备份附加的数据库,您必须将其名称(而非“主要”)提供给sqlite3_backup_init()