我想在内存中运行一些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);
}
答案 0 :(得分:0)
内存数据库没有页面,因为它是空的。
附加数据库保持独立,即其数据未合并到备份中。
要备份附加的数据库,您必须将其名称(而非“主要”)提供给sqlite3_backup_init()
。