了解Qt是比較早的,可是一直沒有耐心去做一個練習。近期花了差不多兩周時間做了次Qt開發練習,基本完成了Qt的入門,逃脫微軟平台又邁出了幾小步。Qt雖然是C++的,但開發應用是比較方便的,我覺得它在界面設計、消息傳遞方面超過了Delphi,甚至在一些方面更優於.net WinForm。給入門造成門檻的是關於Qt的中文資料相對較少,遇到問題尋找解決方法的成本較高,需要極大的耐心。
在學習Qt的時候在考慮一個問題——數據如何做到一定程度的保密而且能對數據進行方便的查詢?首先想到是用數據庫,而數據庫需要有專門的數據庫服務器支持,比如Oracle、MySQL、SQLServer,有沒有一種不需要數據庫服務器支持的數據庫呢?自然又會想到Access、SQLite等。Access 的加密形同虛設,SQLite要支持加密需要修改並重新編譯其源碼或者購買高級的SQLite版本。
當我打開Qt自帶的關於數據庫操作的Demo時,無意看到兩行代碼:
[code:c#]
QSqlDatabase db = QSqlDatabase::addDatabase(“QSQLITE”);
db.setDatabaseName(“:memory:”);
[/code]
用的是上面提到的SQLite數據庫,而這個數據庫的路徑並不像是在本地文件的路徑。經查,這么設定可以直接在內存中創建一個SQLite數據庫。這樣,數據是可以實現不落地的。那么一個具有一定保密功能,同時又擁有數據庫查詢性能,而且無需數據庫服務器支持的數據存儲方案有了。大概思路是這樣的:
1.在資源文件中附加文本格式的數據文件,如果對安全性還有擔心,可以加密這個數據文件。
2.在程序第一次啟動時在內存中創建SQLite數據庫,將這些數據插入到庫中。
這樣之后,當需要對數據進行查詢、排序操作時就可以方便地通過數據庫功能來實現了,同時保證數據庫不落地,數據是比較安全的。唯一要付出的成本是每次程序啟動時都要去將數據插入到即時創建的數據庫中,適用於數據條數和單筆數據都不大,而查詢性能要求較高的情況。
http://wangxianyuan.com/post/qt-memory-sqlite-solution