5

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

数据库已加载到内存中。

4

2 回答 2

11

使用特殊的文件名,:memory:

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

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

SQLITE_OMIT_MEMORYDB

定义时,库不尊重特殊的数据库名称":memory:"(通常用于创建内存数据库)。如果":memory:"传递给sqlite3_open()sqlite3_open16()sqlite3_open_v2(),将打开或创建具有此名称的文件。

但是,如果您想读取已经完全加载到内存中的数据库,则工作量会更大。您必须实现一个自定义 VFS 层来操作内存文件并将其注册到您的 SQLite 上下文中。

看:

我自己没有实现它,所以我无法可靠地判断您是否必须实现整个新的 VFS 层,或者您可以在默认层中替换一些函数(后者不太可能)。

于 2008-11-10T10:35:20.703 回答
1

有一个 memvfs 实现在

article.gmane.org/gmane.comp.db.sqlite.general/46450

于 2009-05-01T11:16:17.477 回答