看起来加载SQLite的所有方法都涉及使用字符串从命名文件加载。我想从内存加载SQlite数据库。
数据库已加载到内存中。
答案 0 :(得分:11)
使用特殊文件名:memory:
sqlite3_open(":memory:", &db);
libsqlite
必须已编译,未经 SQLITE_OMIT_MEMORYDB
定义,如SQLite documentation中所述:
<强>
SQLITE_OMIT_MEMORYDB
强>定义它时,库不遵循特殊数据库名
":memory:"
(通常用于创建内存数据库)。如果":memory:"
传递给sqlite3_open()
,sqlite3_open16()
或sqlite3_open_v2()
,则会打开或创建具有此名称的文件。
如果你想读取已经已经完全加载到内存中的数据库,那将会更有效。您必须实现一个自定义VFS层来操作内存文件,并将其注册到您的SQLite上下文中。
请参阅:
我自己没有实现它,所以我无法可靠地判断你是否必须实现整个新的VFS层,或者你可以在默认值中替换一些函数(后者不太可能)。
答案 1 :(得分:1)