.qrc
içinde :/test.sqlite3
veritabanım var. Ve amaç, bu veritabanını programda doğrudan kullanmaktır. Veritabanı sadece okumak için kullanılır.Veritabanını RAM'da VFS ile depolamak için herhangi bir Qt SQLite eklentisi var mı (Qt kaynak dosyasından veritabanı yüklemek için)?
QSqlDatabase::setDatabase(":/test.sqlite3")
değil eserler, Qt SQLite QT'ın dosya sistemi ile çalışmak için tasarlanmamış çünkü. Çözümlerden biri, .qrc
numaralı veritabanından D:\temdb.sqlite3
veritabanına kopyalamak ve QSqlDatabase::setDatabase("D:\\temdb.sqlite3")
ile kullanmaktır. Ancak program OS dosya sistemi ile çalışmaz.
İkinci çözüm, :/dump.sql
kaynaklarında saklanıyor, daha sonra QSqlDatabase::setDatabase(":memory:")
tarafından bellek içi veritabanı oluşturuluyor ve :/dump.sql
satırlarını okuyarak ve yürüterek dökümün içine içe aktarılıyor. Ancak bu yöntem yavaştır.
Son olarak, zor ama gerçek yolu,baytımız olan RAM'den veritabanı okumak için VFS
uygulamasıyla SQLite için kendi Qt eklentisini oluşturuyor.
Başka bir kolay yol var mı?
P.S. Zaten Converting in-memory sqlite database to blob/char array ve diğer tüm soruları okudum, bu yüzden çift olarak işaretlemeyin. Sorum şu başka yöntemler hakkında.
"Kolay" yolu, no. Ama Sqlite kendi VFS soyutlamasıyla gelir, bu yüzden teoride QT'nin kaynaklarına doğrudan bakmak mümkündür. – peppe
@peppe Herhangi bir örnek var mı? Henüz kimsenin kodlamadığına inanamıyorum :) – Rinat
Tüm veri kümesini bellekte tutmayı planlıyorsanız, erişmek için SQL'i kullanmanız muhtemelen en az etkili olan rotadır. Verileri doğrudan normal C++ kapsayıcılarına okuyabilir ve çok daha iyi erişim sürelerinden yararlanabilirsiniz. – dtech