c - 从 C api 附加一个命名的内存数据库

标签 c sqlite

是否可以使用 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 文档:

  1. 如果您以 "file::memory:?cache=shared" 的形式指定 URI,则所有内存 DB 将被共享
  2. 如果您以 "file:memdb1?mode=memory&cache=shared" 的形式指定一个 URI,那么该数据库将是内存数据库中的一个命名

关于c - 从 C api 附加一个命名的内存数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11518506/

相关文章:

c++ - 有没有办法使用 SWIG 将不同的数组类型从 python 传递到 c++?

java - 从 Android 中的 SQLite 数据库填充 ListView

javascript - 是否可以将 sqlite 用于以 html 和 javascript 构建的网站

c - 中断c代码,md5文件

c - 使用来自 Ctrl+C 的 SIGINT

从字符串中删除所有出现的字符的代码不起作用——但为什么呢?

c - SocketCan Can ID 优先级

java - 连接多个表不返回结果

java - getDatabase 递归调用 sqlite insert 和 getReadableDatabase()

sql - 连接 sqlite 和字符串中的字符串