【问题标题】:How can I load a SQLITE database from a buffer with the C API?如何使用 C API 从缓冲区加载 SQLITE 数据库?
【发布时间】:2011-05-30 01:50:43
【问题描述】:

我正在尝试从内存中加载数据库,而不是打开 .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);,结果相同

我想有一种适当的方法可以实现这一点,因为从流或解密数据中加载数据库可能很常见......

谢谢。

【问题讨论】:

    标签: c++ database sqlite stream buffer


    【解决方案1】:

    我认为正确的方法是在缓冲区周围创建一个SQLite VFS layer,如this 线程中所述。 here 提到了一个可能的/部分解决方案,spmemvfs,虽然我从未尝试过。

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

    【讨论】:

    • 谢谢!我使用了spmemvfs,它可以工作。但是,如果它可以帮助那里的人,在 _open() 方法中指定的文件名不应该是 ":memory:" 否则,它不会加载缓冲区的内容。
    • rockeye,你能发布一个工作示例吗?我似乎无法使用 spmemvfs 让它工作。
    猜你喜欢
    • 2020-11-22
    • 1970-01-01
    • 2022-01-26
    • 2011-02-22
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    相关资源
    最近更新 更多