我在c ++中通过sqlite创建了一个数据库。
db已在内存中创建(使用文件名中的“:memory:”参数),以便有非常快速的行为。
数据库由以下行创建:
sqlite3* mem_database;
if((SQLITE_OK == sqlite3_open(":memory:", &mem_database)){
// The db has been correctly created and
// I can do some stuff with it.
}
sqlite3_close(mem_database);
我的问题是:如何将内存数据库写入磁盘? (当然是通过c / c ++)。
我读了一些关于ATTACH和DETACH sqlite命令的内容,但我可以让它们只使用sqlite交互式shell(而不是c / c ++代码)。
电贺。
答案 0 :(得分:20)
答案 1 :(得分:2)
在对表执行任何操作之前使用事务语句。这确保了快速处理和回滚。这样,您就不需要直接在内存中实现数据库了。
答案 2 :(得分:0)
如果您没有足够的时间阅读@NickDandoulakis的答案所发布的全部文档,只需将以下函数(已在链接中提及)复制并粘贴到代码中即可:
int loadOrSaveDb(sqlite3 *pInMemory, const char *zFilename, int isSave)
{
int rc; /* Function return code */
sqlite3 *pFile; /* Database connection opened on zFilename */
sqlite3_backup *pBackup; /* Backup object used to copy data */
sqlite3 *pTo; /* Database to copy to (pFile or pInMemory) */
sqlite3 *pFrom; /* Database to copy from (pFile or pInMemory) */
rc = sqlite3_open(zFilename, &pFile);
if (rc == SQLITE_OK)
{
pFrom = (isSave ? pInMemory : pFile);
pTo = (isSave ? pFile : pInMemory);
pBackup = sqlite3_backup_init(pTo, "main", pFrom, "main");
if (pBackup) {
(void)sqlite3_backup_step(pBackup, -1);
(void)sqlite3_backup_finish(pBackup);
}
rc = sqlite3_errcode(pTo);
}
(void)sqlite3_close(pFile);
return rc;
}
,然后用于将SQLite数据库的数据(在内存中)保存到文件调用中:
loadOrSaveDb(db_con, target_file, 1);
db_con
是您的数据库连接对象指针,而target_file
是目标文件地址。
备注:如果要将SQLite数据库文件加载到内存中,只需运行:
loadOrSaveDb(db_con, target_file, 0);