Qt中操作SQLite資料庫

2021-09-11 17:49:02 字數 2491 閱讀 4811

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...