У меня есть база данных :/test.sqlite3
внутри .qrc
. И цель состоит в том, чтобы напрямую использовать эту базу данных в программе. База данных используется только для чтения.Есть ли какой-нибудь плагин Qt SQLite для хранения базы данных в ОЗУ с помощью VFS (для загрузки базы данных из файла ресурсов Qt)?
QSqlDatabase::setDatabase(":/test.sqlite3")
не работает, потому что Qt SQLite не предназначен для работы с файловой системой Qt.
Одним из решений является копирование базы данных с .qrc
в D:\temdb.sqlite3
и использование его по QSqlDatabase::setDatabase("D:\\temdb.sqlite3")
. Но программа не должна работать с файловой системой ОС.
Второе решение хранит :/dump.sql
в ресурсах, а затем создает базу данных в памяти на QSqlDatabase::setDatabase(":memory:")
и импортирует в нее дамп, считывая и выполняя строки от :/dump.sql
. Но этот метод медленный.
И, наконец, жесткий, но верный способ создания собственного Qt-плагина для SQLite с реализацией VFS
для чтения базы данных из ОЗУ, где у нас есть байты ":/test.sqlite3"
.
Есть ли еще один простой способ?
P.S. Я уже прочитал все вопросы, такие как Converting in-memory sqlite database to blob/char array и другие, поэтому не отмечайте его как дубликат. Мой вопрос касается любых других методов.
«Простой» способ, нет. Но Sqlite поставляется со своей собственной абстракцией VFS, поэтому теоретически можно заставить ее смотреть прямо в ресурсы Qt. – peppe
@peppe есть примеры? Не могу поверить, что никто еще не закодировал это :) – Rinat
Если вы планируете хранить весь набор данных в памяти, используя SQL для доступа, это, вероятно, наименее эффективный курс, который вы можете предпринять. Вы можете напрямую считывать данные в обычные контейнеры на C++ и получать гораздо больше времени на доступ. – dtech