【发布时间】:2016-06-20 11:01:46
【问题描述】:
我想在内存中运行一些 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);
}
【问题讨论】:
标签: c++ sqlite backup in-memory