孔翔鳴
摘要:Qt因其易用、易擴(kuò)展、跨平臺(tái)等特性,日漸成為流行的開發(fā)框架,該文通過實(shí)例介紹了在Qt開發(fā)中對(duì)于本地?cái)?shù)據(jù)庫sqlite編程的方法。
關(guān)鍵詞:Qt;數(shù)據(jù)庫;sqlite
中圖分類號(hào):TP3
文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2017)10-0004-02
Qt是1991年由奇趣科技開發(fā)的跨平臺(tái)C++圖形用戶界面應(yīng)用程序開發(fā)框架,經(jīng)過20多年的發(fā)展完善,以其易用性、易擴(kuò)展性以及跨平臺(tái)等特點(diǎn),日漸成為流行的GUI開發(fā)框架,其完善的架構(gòu)和豐富的組件可以使得程序員主要關(guān)注于業(yè)務(wù)邏輯,而不必過多的將精力和時(shí)間耗費(fèi)在繁瑣復(fù)雜的界面開發(fā)上。在實(shí)際開發(fā)中,大多數(shù)應(yīng)用都需要用到數(shù)據(jù)庫技術(shù)以管理各種信息,Ot為此也提供了相應(yīng)的模塊和組件,使得對(duì)數(shù)據(jù)庫的開發(fā)也變得非常簡單。
根據(jù)數(shù)據(jù)規(guī)模以及網(wǎng)絡(luò)架構(gòu),數(shù)據(jù)庫大體上分為本地?cái)?shù)據(jù)庫和網(wǎng)絡(luò)數(shù)據(jù)庫兩種,本文主要介紹本地?cái)?shù)據(jù)庫sqlite的開發(fā)方法。在Qt中,通過QtSql模塊提供與平臺(tái)以及數(shù)據(jù)庫種類無關(guān)的數(shù)據(jù)庫接口,該接口通過模型膩圖結(jié)構(gòu)將數(shù)據(jù)庫和用戶界面集成在一起。對(duì)于不同的數(shù)據(jù)庫,Qt使用不同的驅(qū)動(dòng)程序與數(shù)據(jù)庫API進(jìn)行通信,從而為程序員提供統(tǒng)一的開發(fā)接口。在進(jìn)行本地?cái)?shù)據(jù)庫開發(fā)時(shí),使用的是SQLite,對(duì)應(yīng)的驅(qū)動(dòng)程序?yàn)镼SQLITE。
第一行通過addDatabase("QSQLITE")設(shè)置使用sqlite本地?cái)?shù)據(jù)庫,第二行設(shè)置數(shù)據(jù)庫名為"test.db",如果這個(gè)數(shù)據(jù)庫文件不存在則新建,如果存在則打開。這里的數(shù)據(jù)庫文件名可以通過相對(duì)路徑或絕對(duì)路徑來指定。如果是使用網(wǎng)絡(luò)數(shù)據(jù)庫,則需要額外設(shè)置數(shù)據(jù)庫主機(jī)名、用戶名、密碼等。
在打開數(shù)據(jù)庫后,主角QSqlQuery便要登場了,這是我們使用頻率最多的一個(gè)類,它提供了直接執(zhí)行任意SQL語句并處理其結(jié)果的功能,常規(guī)數(shù)據(jù)庫管理的增、刪、改、查都可以通過該類完成。下面是一個(gè)完整例子:
如果我們只需要在代碼中對(duì)數(shù)據(jù)庫進(jìn)行操作并且熟悉SQL語言,那么QsqlQuery就可以基本滿足所有需求了;如果需要進(jìn)一步將數(shù)據(jù)和用戶界面進(jìn)行互動(dòng),比如在表格中顯式查詢結(jié)果,有兩種方式可以完成這個(gè)需求:1.通過代碼將數(shù)據(jù)填入QTableView控件并進(jìn)行相關(guān)管理;2.利用QSqlQueryModel或QSqlTableModel類。QsqlQueryModel/QSqlTableModel類是Qt所提供的一個(gè)高級(jí)界面接口,讓我們直接使用用戶界面來執(zhí)行SQL語句所完成的功能,這可以使得數(shù)據(jù)管理操作更為簡潔,兩個(gè)類的區(qū)別在于:QSqlQueryModel類是只讀的,QSqlT-ableModel類是可以修改表數(shù)據(jù)的。同時(shí),QSqlQueryModel/QSqlTableModel類可以作為QTableView或者QListView的數(shù)據(jù)源,我們可以根據(jù)需要來選擇合適的界面組件。下面是一個(gè)完整的例子:
例2:
通過這個(gè)例子我們可以看到,QSqlTableModel模型非常強(qiáng)大也非常易用,無須靜態(tài)sQL語句,就算你不怎么熟悉數(shù)據(jù)庫,也可以利用它進(jìn)行大部分常用的操作。這個(gè)模型提供了緩沖區(qū),可以將所有修改先保存到model中,只有當(dāng)我們執(zhí)行提交修改后,才會(huì)真正寫入數(shù)據(jù)庫。
QsqlrrableModel類盡管功能強(qiáng)大,但是有一個(gè)“單表”的限制,如果我們的數(shù)據(jù)庫多表之間存在邏輯關(guān)系,QSqITableModel就有點(diǎn)力不從心了,針對(duì)這類需求,Qt提供了QSqlRelationalT-ableModel,這個(gè)類實(shí)際上是QsqlTableM0del的擴(kuò)展,提供了外鍵的支持,利用這個(gè)特性,我們對(duì)數(shù)據(jù)庫的處理便不再局限與單個(gè)表,任何復(fù)雜的邏輯關(guān)系都可以游刃有余地處理了。限于篇幅,不再列舉具體的實(shí)例,讀者可參考上例和Qt的聯(lián)機(jī)文檔學(xué)習(xí)使用。
以上通過實(shí)例介紹了Qt本地?cái)?shù)據(jù)庫的基本用法,掌握了這項(xiàng)技能,我們?cè)诰唧w開發(fā)中遇到數(shù)據(jù)庫管理的需求時(shí),便無須煩惱于數(shù)據(jù)庫的安裝、配置等等麻煩瑣事,直接利用這些組件關(guān)注于業(yè)務(wù)邏輯即可。當(dāng)然,Qt所提供的數(shù)據(jù)庫功能并不限于以上的介紹,諸如并發(fā)、事務(wù)、網(wǎng)絡(luò)等大型數(shù)據(jù)庫系統(tǒng)所擁有的特性,Qt數(shù)據(jù)庫也完全提供,它值得每一個(gè)c++開發(fā)者將其放入自己的開發(fā)工具箱。