Как создать базу данных sqllite3 в памяти?


Одно из подходящих применений для sqlite3-это "базы данных в памяти". Это звучит как действительно полезный инструмент для моих приложений C++. У кого-нибудь есть пример того, как это делается в C или C++? Я специально ищу канонический способ вставить несколько плоских файлов в базу данных в памяти, а затем выполнить некоторые соединения.

3 11

3 ответа:

На самом деле это довольно просто. Просто укажите ': memory: 'в качестве имени файла базы данных при открытии базы данных с помощью C / C++ API. Это особая константа, которую распознает двигатель. То же самое на самом деле работает и для других языков, таких как Python или Ruby, поскольку они обычно просто обертывают C/C++ API. См. http://sqlite.org/c3ref/open.html для получения полной информации.

Просто откройте файл: memory: и это должно сделать его (по крайней мере, это делает в PHP).

Вы упомянули, что хотите читать в нескольких плоских файлах и делать объединения на них. Если есть возможность хранить плоские файлы как базы данных SQLite, вы можете работать непосредственно с обоими, прикрепляя один к другому:

ATTACH foo.db AS foo

Затем обратитесь к таблицам в foo следующим образом:

SELECT * FROM foo.users

Таким образом, вы можете выполнять соединения без необходимости создания базы данных в памяти.

Если вы хотите, чтобы SQLite не использовал временные файлы в качестве журналов, например, вы не хотите никаких действий с файлами, кроме как при ручном запросе соединения, разъединения, присоединения или отсоединения. Затем используйте следующие две прагмы во время выполнения После подключения к базе данных": memory:".

PRAGMA temp_store=MEMORY;
PRAGMA journal_mode=MEMORY;

Из документов .