看起来加载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上下文中.
看到:
sqlite3_vfs
sqlite3_io_methods
我自己没有实现它,所以我无法可靠地判断你是否必须实现整个新的VFS层,或者你可以在默认的一个函数中替换一些函数(后者不太可能).