sqlite是一款開源、輕量級、跨平台的資料庫,無需server,無需安裝和管理配置。它的設計目標是嵌入式的,所以很適合小型應用,也是qt應用開發種常用的一種資料庫。目錄1.驅動
2.初相遇
3.建立表
4.執行增刪改查
5.高階
6.工具
7.參考
qt sql模組使用驅動程式外掛程式(plugins)與不同的資料庫api進行通訊。由於qt的sql模組api與資料庫無關,因此所有特定於資料庫的**都包含在這些驅動程式中。qt提供了幾個驅動程式,也可以新增其他驅動程式。提供驅動程式源**,可用作編寫自己的驅動程式的模型。
qtcreator在*.pro中引入sql模組(qt+=sql),或是vs中在qt vs tool裡勾選上sql模組,就可以使用該模組的介面了。
可以使用qsqldatabase::drivers()獲取驅動程式列表並列印,qt5.9.7輸出如下:
其中,sqlite是乙個程序內資料庫,這意味著沒有必要擁有資料庫伺服器。sqlite在單個檔案上執行,在開啟連線時必須將其設定為資料庫名稱。如果該檔案不存在,sqlite將嘗試建立它。。
/*
* ... ...
* 我喜歡那樣的夢
* 在夢裡 一切都可以重新開始
* 一切都可以慢慢解釋
* 心裡甚至還能感覺到所有被浪費的時光
* 竟然都能重回時的狂喜和感激
* ... ...
* * ----席慕容《初相遇》
*/#include #include void initdb()
else
//刪除資料
void deleterecord(const qstring &name)
//更新資料
void updaterecord(const qstring &name, int age)
//查詢資料
int searchrecord(const qstring &name)
遍歷每一行
int agevalue=-1;
if(query.next())
qdebug()可以看到,如果熟悉sql語句的話,很容易就實現了增刪改查功能。
對於 blob 型別,查詢後可以 tobytearray,修改時可以 bindvalue qbytearray。
有時候會遇到大量資料操作的情況,這時候用普通的insert之類的語句迴圈操作可能會很慢。
技巧一:開啟事務
sqlite通過執行"begin;"或是"begin transaction;"開啟事務,執行"rollback;"進行回滾,執行"commit;"或是"end transaction;"提交事務。qsqldatabase也提供了對應的transaction、rollback、commit三個函式來執行對應操作。
技巧二:關閉寫同步(synchrnous)
在sqlite中,資料庫配置的引數都由編譯指示(pragma)來實現的,而其中synchronous選項有三種可選狀態,分別是full、normal、off。簡要說來,full寫入速度最慢,但保證資料是安全的,不受斷電、系統崩潰等影響,而off可以加速資料庫的一些操作,但如果系統崩潰或斷電,則資料庫可能會損毀。通過執行"pragma synchronous = off;"語句,可以提公升效率,不過若不是臨時資料庫不建議此操作。
其他效率提公升見參考部落格。
(2021-1-24補充)多執行緒操作:
(對如多執行緒建立連線,參照 )
sqlite 預設是檔案鎖, qt 中 sqlite 預設是以多執行緒讀寫模式開啟,如果同時寫入就會出現寫入錯誤:
可以將寫操作上鎖,但是實測執行緒中迴圈寫入時,唯讀開啟去查詢也是會阻塞很久,毫秒到幾秒不等,這時候就得把超時設定長一點。
所以還是得讀寫都加鎖,但這也只能解決單個程序的併發訪問。
兩個輕量的 sqlite 視覺化工具,都提供了免安裝版本:
sqlite studio(可以在tool->config->look設定簡體中文但是新版有些地方沒翻譯,開啟db後別的程式也可以正常操作該db):
db browser for sqlite(有中文翻譯,但是開啟db後別程式的無法操作該db):
文件:e:/qt/qt5.9.7/docs/qt-5.9.7/qtsql/qsqldatabase.html
部落格:部落格:
sqlite教程:
sqlite優化:
sqlite優化:
Qt學習 SQLite資料庫操作
qsqlquery提供了對結果集的訪問,可以一次訪問一條記錄。執行完exec 函式後,會生成一張查詢得到的記錄結果集,qsqlquery的內部指標會位於第一條記錄前面的位置。必須呼叫一次qsqlquery next 函式來使其前進到第一條記錄,然後重複使用next 函式來訪問其他記錄,直到函式返回值...
iOS中操作SQLite資料庫
sql 結構化查詢語言,是一種資料庫查詢和程式語言,用於訪問資料以及查詢 更新和管理關係資料庫系統。常見的sql語句有建立 create 插入 insert 更新 update 刪除 delete 查詢 select static sqlitemanager manager nil sqlitema...
android中sqlite資料庫操作
我們在開發資料庫應用的過程中,對錶的結構有時候會有變化,特別是有時候增加了一些表,或者是增加了一些列。在除錯時就會產生一些問題。比如原來有乙個表tablea。在開發過程中增加了另外乙個表tableb.並相應增加了訪問了的 private static class databasehelper ext...