【发布时间】:2010-09-23 04:40:12
【问题描述】:
sqlite3 的appropriate uses 之一是“内存数据库”。对于我的 C++ 应用程序来说,这听起来像是一个非常有用的工具。有没有人有一个例子说明这是如何在 C 或 C++ 中完成的?我正在寻找一种规范的方法来将几个平面文件放入内存数据库中,然后进行一些连接。
【问题讨论】:
标签: c++ c database sqlite in-memory-database
sqlite3 的appropriate uses 之一是“内存数据库”。对于我的 C++ 应用程序来说,这听起来像是一个非常有用的工具。有没有人有一个例子说明这是如何在 C 或 C++ 中完成的?我正在寻找一种规范的方法来将几个平面文件放入内存数据库中,然后进行一些连接。
【问题讨论】:
标签: c++ c database sqlite in-memory-database
只需打开文件 :memory: 就可以了(至少在 PHP 中是这样)。
您提到您想读取几个平面文件并对其进行连接。如果可以将平面文件存储为 SQLite 数据库,则可以通过将一个附加到另一个来直接使用两者:
ATTACH foo.db AS foo
然后像这样引用 foo 中的表:
SELECT * FROM foo.users
通过这种方式,您无需创建内存数据库即可进行连接。
【讨论】:
其实很简单。使用 C/C++ API 打开数据库时,只需指定 ':memory:' 作为数据库文件名。这是引擎将识别的特殊常数。这实际上适用于其他语言,例如 Python 或 Ruby,因为它们通常只是包装 C/C++ API。详情请参阅http://sqlite.org/c3ref/open.html。
【讨论】:
如果您希望 SQLite 不使用临时文件作为日志,例如,除了手动请求连接、断开连接、附加或分离时,您不希望任何文件活动。然后在连接到 ":memory:" 数据库后在运行时使用以下两个 pragma。
PRAGMA temp_store=MEMORY;
PRAGMA journal_mode=MEMORY;
来自docs.
【讨论】: