如何在SQLite中添加我自己的PRAGMA语句来存储自定义元数据



我想在不创建新表的情况下,将作者姓名、版权、源代码等元数据存储到我的SQLite DB中。我发现我们可以使用PRAGMA语句来设置一些值。。我想存储我自己的自定义名称和值。。。如何创建自定义PRAGMA语句?http://www.sqlite.org/pragma.html

以前有人这样做过吗?医生说。。

"SQLite的C语言API提供了SQLite_FCNTL_PRAGMA文件控制,这使VFS实现有机会添加新的PRAGMA语句或覆盖内置PRAGMA声明的含义。"

请告诉我如何才能做到这一点?

在数据库中存储其值的内置PRAGMA在数据库头中执行此操作。

空间不足,无法添加自定义值。

您别无选择,只能创建一个新表。

不确定这对您来说是否足够,但我使用user_version来跟踪最后一次模式检查。

我所做的是保存上次根据代码模式检查的时间戳。如果是24小时、5米或其他时间,我会重新检查并更新内容。我只需要132b的int,所以这是完美的。如果你需要更多,这不是它。

关于user_version的更多信息,请点击此处(PRAGMA schema_version)和此处(db保留标头空间)

查看新的校验和VFS Shim,了解VFS添加自定义杂注的示例。

源代码链接在上面的页面上,但这里又是它,以防万一。

当然,除了通过表之外,您不能存储其他信息
因此,尽管上面确实展示了如何实现自定义杂注,但您实际的
最终目标是不可能的,因为头是固定的,并为SQLite本身保留。如果你有一个表,为什么要有一个pragma?

ddevienne关于查看VFS Shim来源的回答是朝着正确的方向迈出的一步,但关于无法存储自己的数据的评论是部分正确的(由于我早期的声誉不足,我无法添加评论,所以将其作为回答发布)。这是你自己的vfs,所以你可以随心所欲地组织数据。xRead和xWrite接口只是假设sqlite自己的位置逻辑,但您可以在文件开头保留一个区域用于自己的目的,并相应地转换位置。我可以确认这是有效的,因为在一开始就使用这种技术实现了一个保留小区域的vfs。但也有一些后果,在这种情况下,该文件将与传统的sqlite工具和库不兼容。

最新更新