韓改寧 李永鋒 高伊騰
摘 要:由于嵌入式設(shè)備中可使用的資源相對(duì)較少,針對(duì)嵌入式系統(tǒng)下的數(shù)據(jù)庫(kù)設(shè)計(jì)問題,利用Qt和MySQL實(shí)現(xiàn)數(shù)據(jù)庫(kù)開發(fā),從而解決數(shù)據(jù)庫(kù)大,占用資源多的問題。Qt提供的QtSql模塊實(shí)現(xiàn)Qt數(shù)據(jù)庫(kù)應(yīng)用程序的關(guān)聯(lián),采用MySQL輕型數(shù)據(jù)庫(kù),支持Windows和Linux等操作系統(tǒng),同時(shí)提供ODBC 接口。利用Qt開發(fā)平臺(tái),通過Qt中QSql模塊及相關(guān)數(shù)據(jù)庫(kù)驅(qū)動(dòng),創(chuàng)建面向應(yīng)用的數(shù)據(jù)庫(kù)系統(tǒng)開發(fā),并通過SQL語(yǔ)句進(jìn)行數(shù)據(jù)庫(kù)交互操作,然后通過交叉編譯器,將其移植到ARM Cortex-A8開發(fā)板上,從而實(shí)現(xiàn)嵌入式下的數(shù)據(jù)庫(kù)系統(tǒng)的設(shè)計(jì)與開發(fā)。
關(guān)鍵詞:嵌入式;Qt;QtSQL模塊;MySQL數(shù)據(jù)庫(kù);ARM Cortex-A8
Abstract:Because resources which can be used are relatively few in the embedded devices. For embedded system, a database is designed in this paper, by using Qt and MYSQL, to solve problems of large volume of database and occupying more resources. QtSql module provides a seamless connection to database and Qt applications, MYSQL is used for lightweight database, to support Windows and Linux operating systems and provide ODBC interface. In the paper, Qt development platform is used to create an application database system development through QtSql modules and related database driver, and interact with the database through SQL statements. Then, it is compiled through cross-compiler, and transplanted to ARM Cortex-A8 development board in order to realize the development and design of the database system in embedded environment.
Key words:embedded;Qt;QtSQL model;MYSQL database;ARM Cortex-A8
0 引言
數(shù)據(jù)庫(kù)技術(shù)是計(jì)算機(jī)數(shù)據(jù)處理與信息管理系統(tǒng)的核心,研究和管理的對(duì)象是數(shù)據(jù),所以數(shù)據(jù)庫(kù)技術(shù)是對(duì)數(shù)據(jù)的統(tǒng)一組織和管理。一般在嵌入式開發(fā)中,嵌入式數(shù)據(jù)庫(kù)應(yīng)用到嵌入式設(shè)備中,要求占用內(nèi)存小、運(yùn)行速度快、執(zhí)行效率高等,這樣才可以降低開設(shè)備成本,提高設(shè)備效能。
由于Qt是一個(gè)跨平臺(tái)的C++圖形用戶界面應(yīng)用程序設(shè)計(jì)框架,在建立好的Qt環(huán)境下,在建立基于ARM開發(fā)板的交叉編譯環(huán)境,開發(fā)出可以移植到ARM開發(fā)板上的應(yīng)用程序。
1 Qt中的SQL數(shù)據(jù)庫(kù)
Qt中提供了不同的數(shù)據(jù)庫(kù)接口,為不同層次的用戶提供了豐富的數(shù)據(jù)庫(kù)操作類。QtSql模塊由驅(qū)動(dòng)層、SQL接口層和用戶接口層3部分組成,各層次功能如表1所示。
2 Qt中創(chuàng)建數(shù)據(jù)庫(kù)
2.1 創(chuàng)建連接
通過驅(qū)動(dòng)層或者SQL接口層提供的類來訪問數(shù)據(jù)庫(kù),首先創(chuàng)建并打開數(shù)據(jù)庫(kù)連接。在應(yīng)用程序中,可以向相同的數(shù)據(jù)庫(kù)創(chuàng)建多個(gè)連接。
2.2 使用SQL語(yǔ)句操作
Qt中支持SQL語(yǔ)句。有兩種方式創(chuàng)建數(shù)據(jù)庫(kù)表,一種是利用mySql Comman LineClient端,執(zhí)行SQL語(yǔ)句建立;一種是使用SQL模型類,利用Qt提供MVC模式,比如QSqlQueryModel和QSqlTableModel類等進(jìn)行數(shù)據(jù)庫(kù)操作,而且可以將結(jié)果在表格中顯示出來。
2.2.1 使用SQL語(yǔ)句操作數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)連接成功后,首先要?jiǎng)?chuàng)建student數(shù)據(jù)庫(kù)表, 包括學(xué)生的學(xué)號(hào)、姓名、性別、年齡、學(xué)院、平均成績(jī)。
(1) 利用QSqlQuery類提供SQL語(yǔ)句操作:
然后向表中插入記錄,利用SQL語(yǔ)句操作:
query.exec("insert into student values (1001, ‘王浩,‘男,20,‘計(jì)算機(jī)學(xué)院,90)");
query.exec("insert into student values (1002,‘張紅,‘女,20,‘計(jì)算機(jī)學(xué)院,92)");
(2) 利用MySql命令行方式實(shí)現(xiàn)數(shù)據(jù)庫(kù)表的創(chuàng)建,如圖2所示。
(a) 查詢創(chuàng)建的數(shù)據(jù)庫(kù)
(b) 查詢?cè)摂?shù)據(jù)庫(kù)下包含的數(shù)據(jù)庫(kù)表
(c) 顯示數(shù)據(jù)庫(kù)表結(jié)構(gòu)
(d) 顯示數(shù)據(jù)庫(kù)表數(shù)據(jù)
最后,對(duì)數(shù)據(jù)庫(kù)表進(jìn)行遍歷操作,利用SQL語(yǔ)句,如插入記錄、顯示表記錄、查詢、定位等。
第一種方法不需要單獨(dú)配置其他數(shù)據(jù)庫(kù),直接在Qt開發(fā)平臺(tái)上,對(duì)數(shù)據(jù)庫(kù)表進(jìn)行創(chuàng)建和操作。該方法適合于Qt 下的所以數(shù)據(jù)庫(kù)操作。
第二種方法是在Qt平臺(tái)之外,安裝MySql數(shù)據(jù)庫(kù),然后通過CMD命令的方式創(chuàng)建數(shù)據(jù)表結(jié)構(gòu)及添加表數(shù)據(jù)庫(kù)。該方法對(duì)數(shù)據(jù)庫(kù)表操作直觀,但是需要安裝程序。
2.2.2 Qt實(shí)現(xiàn)數(shù)據(jù)庫(kù)表的顯示
Qt中提供了更簡(jiǎn)單的數(shù)據(jù)庫(kù)操作和數(shù)據(jù)顯示模型,基于MVC(Model-View-Control)架構(gòu),Qt下提供多種Model模型和View視圖方式,在此,通過兩個(gè)Model模型進(jìn)行數(shù)據(jù)表管理。
(1) QSqlQueryModel類對(duì)數(shù)據(jù)表顯示
創(chuàng)建QSqlQueryModel的實(shí)例modelQuery,再利用SQL語(yǔ)句查詢student表的內(nèi)容,再建立了一個(gè)視圖view,通過視圖的setModel方法添加模型。
3 學(xué)生信息管理數(shù)據(jù)庫(kù)設(shè)計(jì)
按照上述數(shù)據(jù)庫(kù)連接與SQL語(yǔ)句操作方法,利用Qt中QSqlTableModel類模型對(duì)數(shù)據(jù)庫(kù)進(jìn)行增加、刪除、修改及查詢等操作。登錄界面如圖3所示,數(shù)據(jù)庫(kù)主界面如圖4所示,數(shù)據(jù)庫(kù)表操作如圖5-圖7所示。
4 數(shù)據(jù)庫(kù)系統(tǒng)移植
首先,在ARM Cortex-A8開發(fā)板上配置環(huán)境,移植操作?系統(tǒng),然后通過交叉編譯器arm_linux_gcc進(jìn)行編譯,最后,將交叉編譯后生成的可執(zhí)行文件移植到開發(fā)板上并運(yùn)行。學(xué)生信息管理平臺(tái)效果如圖8所示。
5 總結(jié)
針對(duì)嵌入式系統(tǒng)下的數(shù)據(jù)庫(kù)設(shè)計(jì)問題,本設(shè)計(jì)利用Qt和MySQL實(shí)現(xiàn)數(shù)據(jù)庫(kù)開發(fā),從而解決數(shù)據(jù)庫(kù)大,占用資源多的問題。通過Qt提供的QtSql模塊實(shí)現(xiàn)數(shù)據(jù)庫(kù)關(guān)聯(lián),利用SQL語(yǔ)句實(shí)現(xiàn)數(shù)據(jù)庫(kù)表的創(chuàng)建和添加記錄,通過QSqlQueryModel類和QSqlTableModel類兩種模型進(jìn)行數(shù)據(jù)管理,采用QTableView類視圖實(shí)現(xiàn)數(shù)據(jù)庫(kù)表的顯示,最后,通過交叉編譯,并移植到ARM Cortex-A8開發(fā)板上。該設(shè)計(jì)方案簡(jiǎn)單易操作,占用資源較少,適合嵌入式系統(tǒng)下的小型數(shù)據(jù)庫(kù)系統(tǒng)開發(fā)。
參考文獻(xiàn)
[1] 張治國(guó),董西廣.基于Qt平臺(tái)的數(shù)據(jù)庫(kù)編程[J].福建電腦,2011 (3):165-167.
[2] 孔翔鳴. Qt本地?cái)?shù)據(jù)庫(kù)開發(fā)[J]. 電腦知識(shí)與技術(shù), 2017, 13(10):4-5.
[3] 梁隆愷, 韓改寧, 王曉妮. 嵌入式Qt下的數(shù)據(jù)庫(kù)程序設(shè)計(jì)與開發(fā)[J]. 辦公自動(dòng)化, 2014(21):58-61.
[4] 蔡志明,陸川富.精通Qt4編程[M]. 第2版.北京:電子工業(yè)出版社,2011.
[5] 閔孝忠, 朱林立. QT環(huán)境下通用數(shù)據(jù)庫(kù)組件技術(shù)的研究與設(shè)計(jì)[J]. 計(jì)算機(jī)應(yīng)用與軟件, 2015, 32(12):231-234.
[6] 毛成果.采煤機(jī)搖臂便攜式數(shù)據(jù)采集及分析系統(tǒng)研究[D]. 徐州:中國(guó)礦業(yè)大學(xué), 2014.
[7] 郭琳. 一種多功能教學(xué)輔助系統(tǒng)的軟件設(shè)計(jì)[D]. 哈爾濱:黑龍江大學(xué), 2018.
[8] 瞿帥,張曉麗,朱程浩,等.機(jī)載激光雷達(dá)森林資源調(diào)查系統(tǒng)的設(shè)計(jì)與試驗(yàn)[J].西北林學(xué)院學(xué)報(bào), 2018, 33(4):175-182.
[9] 林曉斌, 林晨. 基于ARM9與QT的多功能智能車載系統(tǒng)研發(fā)[J].赤峰學(xué)院學(xué)報(bào)(自然科學(xué)版), 2018(3). 92-94.
(收稿日期:2019.09.05)