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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在SQLite中添加自己的PRAGMA语句来存储自定义元数据?相关的知识,希望对你有一定的参考价值。

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

有人做过这个吗? 文档中说...

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

请告诉我如何才能实现?

答案

内置的PRAGMA在数据库中存储自己的值,是在 数据库头.

没有足够的空间来添加自定义值。

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

另一答案

不知道这对你来说是否足够,但我使用了 user_version 来跟踪最后一次模式检查。

我所做的是保存它最后一次与代码模式检查的时间戳。如果已经过了24小时,或者5米,或者其他什么,我就重新检查并更新东西。我只需要1个32b的int就可以了,所以很完美。如果你需要更多,这不是它。

更多信息 user_version 此处(PRAGMA schema_version)此处

另一答案

看看新的 校验和 VFS Shim 的例子,以了解VFS添加自定义pragma的情况。

源代码在上面的页面上有链接,但是...。又来了,以备不时之需。

但当然,你不能存储额外的信息,除非通过表。因此,虽然上面确实展示了如何实现自定义pragma,但你的实际最终目标是不可能实现的,因为表头是固定的,是为SQLite本身保留的。如果你有一个表,那为什么还要有一个pragma呢?

以上是关于如何在SQLite中添加自己的PRAGMA语句来存储自定义元数据?的主要内容,如果未能解决你的问题,请参考以下文章

sqlite 语句中返回的行数

为啥 SQLite pragma foreign_keys 在数据库连接中不持久?

如何使用 #pragma 和 gcc 选择性地禁用 -Werror

如何在#ifdef 语句中使用/避免#pragma

SQLite pragma 命令中的 Android Studio 标记错误,<pragma value> 应为“ON”

不要通过 QSqlQuery 获得所有 sqlite pragma 的结果