是否可以使用 C API 附加命名的 SQLite3 :memory:
数据库?当然有sqlite3_open
,但是如何设置查询中使用的名称呢?另外,我可以通过执行 ATTACH DATABASE
语句来附加它,但是我该如何获取它的 DB 指针呢?
背景:
我正在使用虚拟表将 SQLite 接口(interface)驱动到一组外部文件。我主要使用 SQLite 来访问合适的 SQL 查询和现有的驱动程序,例如Python。我定义了一个函数 open_myfiles
,它当前根据给定目录中的文件创建所有虚拟表。应用程序只需执行 SELECT open_myfiles('/path/to/tables')
,数据库就会填充正确的虚拟表。
但是,我正在尝试改进。目前,虚拟表是持久化到当前数据库,难以加载多个目录。我认为更好的方法是将每个目录附加为一个单独的、命名的 :memory:
数据库。
最佳答案
通过传递正确的连接字符串是可能的。重要的阅读是this part SQLite 文档:
- 如果您以
"file::memory:?cache=shared"
的形式指定 URI,则所有内存 DB 将被共享 - 如果您以
"file:memdb1?mode=memory&cache=shared"
的形式指定一个 URI,那么该数据库将是内存数据库中的一个命名
关于c - 从 C api 附加一个命名的内存数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11518506/