如何使用C API从缓冲区加载SQLITE数据库?

3
我正在尝试从内存中加载一个数据库,而不是打开一个.sqlite文件。我已经阅读了C/C++ API参考文档,但我找不到正确的方法。
我试图加载的缓冲区只是在内存中加载的sqlite文件。我只想使用这个缓冲区(一个const char*数组)而不使用文件系统(我本可以将这个缓冲区保存在文件中,然后加载文件,但没有必要)。
首先,我创建了一个内存数据库: mErrorCode = sqlite3_open_v2(":memory:", &mSqlDatabase, lMode, NULL); 这返回SQLITE_OK,然后我尝试将缓冲区用作语句并调用preparev2(MyDB, MyBufferData, MyBufferLength, MyStatement, NULL),但它不是真正的语句,而且返回错误。如果直接调用exec(MyDB, MyBufferData, NULL, NULL, NULL);也是同样的结果。
我猜想有一种适当的方法来实现这一点,因为从流或解密数据加载数据库可能很常见...
谢谢。
1个回答

1

我认为正确的方法是在您的缓冲区周围创建一个SQLite VFS层,如线程中所提到的。可能/部分解决方案spmemvfs这里提到,尽管我从未尝试过。

如果您的数据库不需要并发性,则创建自己的VFS实现应该非常简单。


谢谢!我使用了spmemvfs,它很有效。然而,如果有人需要帮助,那么在_open()方法中指定的文件名不应该是“:memory:”,否则它将无法加载缓冲区的内容。 - rockeye
rockeye,你能发一个可用的例子吗?我似乎无法使用spmemvfs使其工作。 - RCECoder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接