0
我想有一些sqlite數據庫在內存中運行。sqlite備份內存數據庫C++
我可以基於文件的數據庫加載到內存數據庫, 我可以做基於文件數據庫的備份,但什麼是失敗,一個 內存數據庫備份到文件中。
我查了兩個樣本,這裏暴露: https://www.sqlite.org/backup.html
我的意思是,我用這些例子。 結果總是SQLITE_OK所有sqlite的函數調用,在第二個例子execept 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個表,5列和500行的情況下創建的),但備份是空的:沒有表,沒有數據。 – nullptr