将内存中的 sqlite 数据库转换为 blob/char 数组

Posted

技术标签:

【中文标题】将内存中的 sqlite 数据库转换为 blob/char 数组【英文标题】:Converting in-memory sqlite database to blob/char array 【发布时间】:2017-04-02 22:19:31 【问题描述】:

我有一个内存中的 sqlite 数据库,我想将其转换为一个简单的 blob,并且我希望最好不使用任何序列化库来执行此操作。

我还使用 sqlite api 备份调用将其序列化到磁盘,这也可以用于我的目的吗?

或者,是否可以以任何其他方式简单地将数据库从内存复制到 char 数组? (使用C++开发)

【问题讨论】:

所以您的内存中有一个 SQLite 数据库,并希望将其作为 blob 存储到另一个数据库中? YO DAWG,我听说你喜欢......(抱歉无法抗拒)。有一个很好的 QT 示例qtcentre.org/threads/… - 因为它不严重依赖 QT 函数,所以您应该能够使用 std::string 和 sqlite api 计算出仅 c++ 的版本。无论如何,看到 sqlite 的备份示例了吗?可能会重载流运算符以满足您的需要 好吧,那个 qt 示例不是做备份 api 做的吗?我想要的是将整个数据库转换为保留该内存的 char 数组。基本上是复制数据库。备份 api 的内部实现了我想要的,需要研究一下。 【参考方案1】:

SQLite 不允许您直接访问内存数据库的内部存储。

您可以implement your own VFS 为 blob 创建一个“文件”接口,但只浏览(临时)磁盘文件听起来要容易得多。

【讨论】:

谢谢,我现在正在研究 vfs 演示 (sqlite.org/src/doc/trunk/src/test_demovfs.c),但我真的希望有一个更简单(或至少直接)的方法。涉及文件确实超级简单,但我宁愿不涉及文件系统。 跟进:是否可以组合使用多个 VFS 层(我猜,不是)?显然已经有另一层用于其他目的。 可以堆叠 VFS,但这不是您想要的(您只想将该 DB 存储在 blob 中)。此外,SQLite 的内存数据库根本不使用 VFS。

以上是关于将内存中的 sqlite 数据库转换为 blob/char 数组的主要内容,如果未能解决你的问题,请参考以下文章

将数据库中的所有图像 (BLOB) 保存到文件夹(“内存不足。”)

如何将图像存储为 Sqlite 中的 blob 以及如何检索它?

如何将::序列化为 sqlite::blob?

为啥 getBlob() 从我的数据库中的 Blob 列中检索整数数据?

从 BLOB(FMDB 结果)转换为 NSData 对象

js对象在sqlite中保存和读取