看起来加载SQLite的所有方法都需要使用字符串从命名文件中加载。我想要从内存中加载SQLite数据库。
该数据库已经加载到内存中。
使用特殊的文件名: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层中的某些函数来解决问题(后者不太可能)。
这里有一个memvfs实现: