關(guān)于 Qt中數(shù)據(jù)庫(kù)簡(jiǎn)單學(xué)習(xí)教程
OT 數(shù)據(jù)庫(kù)是本文要介紹的內(nèi)容,主要是來了解QT中的數(shù)據(jù)庫(kù)的學(xué)習(xí)。Qt中使用QtSql模塊實(shí)現(xiàn)了對(duì)數(shù)據(jù)庫(kù)的***支持,這個(gè)模塊是一組類的集合,使用這個(gè)模塊我們需要加入頭文件#include <QtSql>,而在工程文件中需要加入一行代碼:
- QT += sql
QSqlDatabase 數(shù)據(jù)庫(kù)
QSqlQuery 執(zhí)行sql相關(guān)語句事務(wù)是數(shù)據(jù)庫(kù)的一個(gè)重要功能,所謂事務(wù)是用戶定義的一個(gè)數(shù)據(jù)庫(kù)操作序列,這些操作要么全做要么全不做,是一個(gè)不可分割的工作單位。在Qt中用transaction()開始一個(gè)事務(wù)操作,用commit()
函數(shù)或rollback()函數(shù)進(jìn)行結(jié)束。commit()表示提交,即提交事務(wù)的所有操作。具體地說就是將事務(wù)中所有對(duì)數(shù)據(jù)庫(kù)的更新寫回到數(shù)據(jù)庫(kù),事務(wù)正常結(jié)束rollback()表示回滾,即在事務(wù)運(yùn)行的過程中發(fā)生了某種故障,事務(wù)不能繼續(xù)進(jìn)行,系統(tǒng)將事務(wù)中對(duì)數(shù)據(jù)庫(kù)的所有已完成的操作全部撤銷,回滾到事務(wù)開始時(shí)的狀態(tài)。
QSqlDatabase::database()返回程序前面所生成的連接的QSqlDatabase對(duì)象。hasFeature()函數(shù)可以查看一個(gè)數(shù)據(jù)庫(kù)是否支持事務(wù)。
Qt中使用了自己的機(jī)制來避免使用SQL語句,它為我們提供了更簡(jiǎn)單的數(shù)據(jù)庫(kù)操作和數(shù)據(jù)顯示模型。它們分別是只讀的QSqlQueryModel,操作單表的QSqlTableModel和以及可以支持外鍵的QSqlRelationalTableModel。
要想使其可讀寫,需要自己的類繼承自QSqlQueryModel,并且重寫setData() 和 flags() 兩個(gè)函數(shù)。如果我們要改變數(shù)據(jù)的顯示,就要重寫data() 函數(shù)。
QSqlTableModel,該類提供了一個(gè)可讀寫單張SQL表的可編輯數(shù)據(jù)模型??尚薷模迦?,刪除,查詢,和排序。
這個(gè)模型可以將所有修改先保存到model中,只有當(dāng)我們執(zhí)行提交修改后,才會(huì)真正寫入數(shù)據(jù)庫(kù)。當(dāng)然這也是因?yàn)槲覀冊(cè)谧铋_始設(shè)置了它的保存策略:
- model->setEditStrategy(QSqlTableModel::OnManualSubmit);
OnManualSubmit表明我們要提交修改才能使其生效。
QSqlRelationalTableModel,該類為單張的數(shù)據(jù)庫(kù)表提供了一個(gè)可編輯的數(shù)據(jù)模型,它支持外鍵。
在Qt中的QSqlRelationalDelegate委托類就能實(shí)現(xiàn)修改相關(guān)表。我們只需添加加一行代碼:
- ui->tableView->setItemDelegate(new QSqlRelationalDelegate(ui->tableView));
- QT += xml
QtXml Module它們主要是服務(wù)于兩種操作XML文檔的方法:DOM和SAX。Dom(Document Object Model,即文檔對(duì)象模型)把XML文檔轉(zhuǎn)換成應(yīng)用程序可以遍歷的樹形結(jié)構(gòu),這樣便可以隨機(jī)訪問其中的節(jié)點(diǎn)。它的缺點(diǎn)是需要將整個(gè)XML文檔讀入內(nèi)存,消耗內(nèi)存較多。
在QDom中,是將整個(gè)XML文件讀到內(nèi)存中的doc對(duì)象中的。然后使用節(jié)點(diǎn)(QDomNode )操作doc對(duì)象,像XML說明,元素,屬性,文本等等都被看做是節(jié)點(diǎn),這樣就使得操作XML文檔變得很簡(jiǎn)單,我們只需通過轉(zhuǎn)換函數(shù)將節(jié)點(diǎn)轉(zhuǎn)換成相應(yīng)的類型,如
- QDomElement e = n.toElement();
如果你只想讀取并顯示整個(gè)XML文檔,那么SAX是很好的選擇,因?yàn)樗峁┝吮菵OM更簡(jiǎn)單的接口,并且它不需要將整個(gè)XML文檔一次性讀入內(nèi)存,這樣便可以用來讀取較大的文件。
在Qt的QtXml模塊中提供了一個(gè)QXmlSimpleReader的類,它便是基于SAX的XML解析器。這個(gè)解析器是基于事件的,但這些事件由它自身進(jìn)行關(guān)聯(lián),我們并不需要進(jìn)行設(shè)置。我們只需知道,當(dāng)解析器解析一個(gè)XML的元素時(shí),就會(huì)執(zhí)行相應(yīng)的事件,我們只需要重寫這些事件處理函數(shù),就能讓它按照我們想法進(jìn)行解析。
小結(jié):關(guān)于 Qt 數(shù)據(jù)庫(kù)簡(jiǎn)單學(xué)習(xí)教程的內(nèi)容介紹完了,希望通過本文的學(xué)習(xí)能對(duì)你有所幫助!


















