SQLite 备份内存数据库 C++
sqlite backup memory database c++
我想在内存中运行一些SQLite数据库。
我可以将基于文件的数据库加载到内存数据库中,我可以备份基于文件的数据库,但失败的是将内存数据库备份到文件。
我检查了两个示例,在这里公开:https://www.sqlite.org/backup.html
我的意思是,我使用了这些例子。结果始终在所有 sqlite 函数调用上SQLITE_OK,exebut 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);
}
内存中数据库没有页,因为它是空的。
附加的数据库保持独立,即其数据不会合并到备份中。
要备份连接的数据库,必须将其名称(而不是"main")指定给sqlite3_backup_init()
。
相关文章:
- 查询SQLite数据库中的日期
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何在ArangoDb AQL查询中指定数据库
- 从数据库实时显示QT c++中的数据
- 使用 pqxx 将 std::vector 存储在 postgresql 中,并从数据库中检索它
- 无法在C++中建立与MySQL数据库的连接
- 将类实现到数据库程序中
- 连接 dockerized 模型和 dockerized 数据库时出现"无法 SQLConnect"错误
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- 调试编译的服务器在数据库打开时崩溃
- C++变量mysql_query到数据库
- LMDB:在有限的内存系统中打开大型数据库
- 如何在多个线程中创建 QSql数据库连接时防止名称冲突
- 以只读模式打开数据库时SQLITE_CANTOPEN错误
- 如何使用SQLite将数据库中的值导出为C / C++中的字符串或字符?
- 如何在Qt中从数据库中检索二进制数据?
- 如何从网站获取数据并将其传输到数据库?
- 在装有 CLion 的 Mac 上使用 C++ 连接到 MySQL 数据库时出现问题
- Qt5 从 MySQL 数据库中选择数据
- 当我不需要数据库中的所有值时,如何部分初始化 c++ 对象?