如何使用SQLite打开内存中的数据库?

6

看起来加载SQLite的所有方法都需要使用字符串从命名文件中加载。我想要从内存中加载SQLite数据库。

该数据库已经加载到内存中。

2个回答

12

使用特殊的文件名:memory:

sqlite3_open(":memory:", &db);

libsqlite必须在未定义SQLITE_OMIT_MEMORYDB的情况下编译,如SQLite文档所指出:

SQLITE_OMIT_MEMORYDB

如果定义了此选项,则库不会遵守特殊的数据库名称“:memory:”(通常用于创建内存数据库)。 如果将“:memory:”传递给sqlite3_open()sqlite3_open16()sqlite3_open_v2(),则会打开或创建具有此名称的文件。

但是,如果您想要读取已完全加载到内存中的数据库,则需要更多工作。 您将需要实现自定义VFS层以操作内存文件,并将其注册到SQLite上下文中。

请参见:

我自己没有实现过它,因此无法可靠地告诉您是否必须实现整个新VFS层,还是可以通过替换默认VFS层中的某些函数来解决问题(后者不太可能)。


这个实现的细节超出了这个问题的范围吗?如果有人能填写这些细节,那么这里就会有一个端到端的解决方案,我会非常感激。 - Klathzazt

1

这是公共页面。http://article.gmane.org/gmane.comp.db.sqlite.general/46450 - stephen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接