看起来所有加载 SQLite 的方法都涉及使用字符串从命名文件加载。我想从内存中加载 SQlite 数据库。
数据库已加载到内存中。
使用特殊的文件名,: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 层,或者您可以在默认层中替换一些函数(后者不太可能)。
有一个 memvfs 实现在