国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

中標(biāo)麒麟環(huán)境下基于Qt的神通數(shù)據(jù)庫編程淺析

2017-05-12 23:35姜家文許榮勝胡振宇
軟件工程 2017年3期

姜家文+許榮勝+胡振宇

摘 要:隨著國外各種信息安全事件頻發(fā),在國防等關(guān)鍵領(lǐng)域采用國外開發(fā)的閉源操作系統(tǒng)和軟件可能引入未知后門,對國家信息安全帶來潛在的隱患。本文采用中標(biāo)麒麟為操作系統(tǒng),以開源Qt為開發(fā)軟件,對國產(chǎn)神通數(shù)據(jù)庫進行操作編輯,實現(xiàn)需要數(shù)據(jù)庫情景下的基本軟件編程,為關(guān)鍵領(lǐng)域?qū)崿F(xiàn)數(shù)據(jù)安全和自主可控提供了解決思路。

關(guān)鍵詞:中標(biāo)麒麟;神通數(shù)據(jù)庫;Qt

中圖分類號:TP311 文獻標(biāo)識碼:A

Abstract:As information security incidents frequently happen in foreign countries,it may lead to unknown back doors and cause potential threats to national information security if foreign closed-source operating systems and software programs are applied in crucial areas,such as the national defense.In this paper,the study is conducted in the NeoKylin operating system and open-source Qt is applied as the development software.The domestic Shentong database is applied to implement the basic database programming,which provides solving ideas to guarantee security,independence and controllability of the information in crucial areas.

Keywords:NeoKylin;Shentong database;Qt

1 引言(Introduction)

近年來,國外各種信息安全事件頻發(fā),特別是“棱鏡門”事件給各個國家敲響了信息安全的警鐘。采用國外開發(fā)的閉源操作系統(tǒng)和軟件可能引入未知后門,對政府、國防、金融、電力、機要、保密等領(lǐng)域的安全帶來潛在的隱患[1-3]。2014年5月16日,中國政府采購網(wǎng)發(fā)布《關(guān)于進行信息類協(xié)議供貨強制節(jié)能產(chǎn)品補充招標(biāo)的通知》,其中明確要求計算機類產(chǎn)品不允許安裝微軟Windows 8操作系統(tǒng)。因此在信息安全要求高的領(lǐng)域,采用國產(chǎn)系統(tǒng)和開源軟件為大勢所趨。本文采用中標(biāo)麒麟為操作系統(tǒng),以開源Qt為開發(fā)軟件,對國產(chǎn)神通數(shù)據(jù)庫進行操作編輯,實現(xiàn)需要數(shù)據(jù)庫情景下的軟件基本編程,為關(guān)鍵領(lǐng)域?qū)崿F(xiàn)數(shù)據(jù)安全和自主可控提供了解決思路。

2 編程環(huán)境 (Programming environment)

2.1 中標(biāo)麒麟操作系統(tǒng)

中標(biāo)麒麟是中標(biāo)軟件有限公司研制推出的國內(nèi)首款自主可控、高安全等級可信操作系統(tǒng),全稱為中標(biāo)麒麟可信操作系統(tǒng)軟件。結(jié)合可信計算機技術(shù)和操作系統(tǒng)安全技術(shù),中標(biāo)麒麟通過信任鏈的建立及傳遞實現(xiàn)對平臺軟硬件的完整性度量;提供基于三權(quán)分立機制的多項安全功能和統(tǒng)一的安全控制中心;全面支持國內(nèi)外可信計算規(guī)范(TCM/TPCM、TPM2.0);兼容主流的軟硬件和自主CPU平臺,如飛騰、龍芯、申威。文中所用的軟件版本為Neoky Lin3.2?,F(xiàn)階段麒麟系統(tǒng)安裝已友好化,可全程傻瓜式安裝,但中途注意不要忘記勾選安裝所需要的開發(fā)環(huán)境和工具包。

2.2 Qt5.5開源開發(fā)工具

Qt是一個1991年由奇趣科技開發(fā)的跨平臺C++圖形用戶界面應(yīng)用程序開發(fā)框架[4]。它既可以開發(fā)GUI程序,也可用于開發(fā)非GUI程序。Qt是面向?qū)ο蟮目蚣埽褂锰厥獾拇a生成擴展以及一些宏,易于擴展,允許組件編程。選擇Qt作為開發(fā)工具不僅因為其開發(fā)功能強大,許多著名軟件如Opera瀏覽器、Skype、Google地球等都由Qt開發(fā)而來。更主要是有開源版本的同時支持跨平臺運行,一次開發(fā)可以幾乎不需要改動的情況下,在Windows和麒麟下編譯運行,為程序過度創(chuàng)造條件。文中使用Linux Red-hat開源版Qt5.5,采用可視化編程模式。網(wǎng)絡(luò)上可下載到兩種安裝包,一種是源代碼版,安裝前需要自己編譯,好處是可以根據(jù)需要進行適當(dāng)?shù)脑O(shè)置,另一種是已編譯好可直接安裝,但安裝過程不可編輯,建議對Linux系統(tǒng)不熟悉的用戶使用后者。另Qt5相對于Qt4,改進較大,Qt4運行Qt5代碼會出錯,而Qt4中部分代碼Qt5也不再支持,因此團隊開發(fā)時應(yīng)注意使用同一版本的Qt。

2.3 神通數(shù)據(jù)庫

神通數(shù)據(jù)庫是一款國產(chǎn)的計算機數(shù)據(jù)庫,提供大型關(guān)系型數(shù)據(jù)庫通用的功能。其具有豐富的數(shù)據(jù)類型、多種索引類型、存儲過程、觸發(fā)器、內(nèi)置函數(shù)、視圖、Package、行級鎖、完整性約束、多種隔離級別、在線備份、支持事務(wù)處理等通用特性。系統(tǒng)支持SQL通用數(shù)據(jù)庫查詢語言,提供多種標(biāo)準(zhǔn)數(shù)據(jù)訪問接口;便于開發(fā)編程,另外兼容Oracle數(shù)據(jù)庫,便于移植。文中使用版本為神通數(shù)據(jù)庫管理系統(tǒng)7.0。在安裝時注意給予root權(quán)限,否則在創(chuàng)建數(shù)據(jù)庫時會出錯。

3 Qt與神通數(shù)據(jù)庫的連接(Connection between Qt and Shentong datebase )

數(shù)據(jù)庫提供標(biāo)準(zhǔn)的ODBC、JDBC、OLEDB/ADO、.NET Framework和ACI等多種數(shù)據(jù)訪問接口[5]。其中OLEDB/ADO和.NET Framework是用于Windows系統(tǒng),其他三種兼容Windows系統(tǒng)和麒麟系統(tǒng),但是ODBC、JDBC在使用前均需要在麒麟系統(tǒng)上配置相應(yīng)驅(qū)動。ACI接口使用C語言或C++語言通過SQL來訪問神通數(shù)據(jù)庫。在使用神通ACI 接口編程時,僅需要引入頭文件aci.h,不需要其他配置操作。ACI接口采用兼容Oracle數(shù)據(jù)庫OCI接口方式,使得應(yīng)用能夠快速的從Oracle數(shù)據(jù)庫遷移到神通數(shù)據(jù)庫上,極大的減少了應(yīng)用開發(fā)移植的時間和成本。神通數(shù)據(jù)庫自帶SQL交互工具,為用戶提供友好的圖形化界面使用SQL語言,操作數(shù)據(jù)庫對象和更新數(shù)據(jù)。因此使用ACI接口的方式也使得程序檢驗變得簡單。綜上,文中采用ACI接口方式建立數(shù)據(jù)庫和Qt的連接。

使用ACI的方式建立Qt與神通數(shù)據(jù)庫的連接主要經(jīng)歷幾個步驟。第一步,初始化神通ACI接口的運行環(huán)境。第二步,分配環(huán)境句柄、語句句柄、服務(wù)器句柄、會話句柄等數(shù)據(jù)結(jié)構(gòu)。這兩步基本每次操作都一樣,是默認必須有的。第三步,建立與神通數(shù)據(jù)庫的連接及創(chuàng)建用戶會話。建立連接需要給程序提供神通數(shù)據(jù)庫服務(wù)器地址,用戶名和密碼。如果是在本機開發(fā)調(diào)試,連接自身安裝數(shù)據(jù)庫,服務(wù)器地址可直接輸入localhost。第四步,通過SQL語句與神通數(shù)據(jù)庫服務(wù)器交互,然后對獲取的數(shù)據(jù)進行處理。這一步包含幾個步驟。首先需要準(zhǔn)備SQL語句,告訴數(shù)據(jù)庫需要執(zhí)行的操作,如查詢(SELECT)、插入(INSERT)、更新(UPDATE)等。然后按位置綁定所操作表中的數(shù)據(jù),告訴數(shù)據(jù)庫每個數(shù)據(jù)的類型,如整形(SQLT_INT),字符串類型(SQLT_STR),字符大對象型(SQLT_CLOB)等。這是關(guān)鍵的一步,因為少綁、沒綁、或者錯綁均得不到正確的結(jié)果。最后執(zhí)行SQL語句,該步中的執(zhí)行分為有結(jié)果顯示和沒有結(jié)果顯示兩種。前者比如查詢類,執(zhí)行SQL語句后僅將結(jié)果放置在內(nèi)存中,需要加循環(huán)輸出顯示語句。后者比如插入類,并不需要反饋結(jié)果。第五步,結(jié)束用戶會話,斷開ACI接口與神通數(shù)據(jù)庫的連接,并釋放在程序中所分配的各類句柄和資源。這一步很重要,在對有很多數(shù)據(jù)的大型數(shù)據(jù)庫進行操作時,會占用系統(tǒng)大量的內(nèi)存和CPU資源。如果每次操作后,不及時釋放資源,會使服務(wù)器負荷越來越重,最后癱瘓,造成不可估計的后果。ACI接口有錯誤句柄,可以在程序中利用其收集錯誤信息,方便程序排錯。以上操作和使用函數(shù)簡明顯示如圖1所示。

4 神通數(shù)據(jù)庫編程實例(Programming examples of Shentong database)

本節(jié)使用Qt和神通數(shù)據(jù)庫,在麒麟操作系統(tǒng)下通過ACI接口編寫一個實例的小程序,主要實現(xiàn)數(shù)據(jù)的存儲、讀取和刪除。

4.1 例子背景

建立一個學(xué)生花名冊,要求可視化界面錄入、顯示或者刪除學(xué)生的信息。其中每個學(xué)生包含的信息包括學(xué)號(唯一標(biāo)識)、姓名、年齡、性別和家庭住址共五項內(nèi)容。

4.2 設(shè)計思路

編程主要包括兩個部分,可視化界面和后臺程序處理。按照例子背景要求,主界面上應(yīng)該有錄入學(xué)生信息的五個輸入框、錄入按鈕、顯示花名冊按鈕、顯示控件及刪除按鈕。利用Qt做出主界面,展示如圖2所示。

后臺程序主要實現(xiàn)學(xué)生信息數(shù)據(jù)的存儲、讀取及顯示、刪除三種功能。每一種都離不開數(shù)據(jù)庫的操作,這都可以利用ACI接口實現(xiàn)。在數(shù)據(jù)庫中建立學(xué)生信息表,以學(xué)號為主鍵,共建5列,分別為學(xué)號、姓名、性別、年齡和家庭住址,即每行代表一名學(xué)生的所有信息。特別值得一提的是姓名、性別和家庭住址在進行數(shù)據(jù)庫中錄入需要記錄中文,此時數(shù)據(jù)綁定應(yīng)該選擇字符大對象(CLOB)類型。誤操作處理也是需要考慮的。比如學(xué)號唯一,當(dāng)錄入相同學(xué)號學(xué)生信息時應(yīng)提示錯誤;學(xué)生信息錄入不全時,點擊錄入按鈕,應(yīng)該有提示;刪除前應(yīng)該有確認提示,刪除或者錄入成功時也應(yīng)有提示等等。

4.3 關(guān)鍵代碼展示

篇幅所限,為了盡可能展示Qt和神通數(shù)據(jù)交互編程過程,以學(xué)生信息數(shù)據(jù)顯示為例,給出關(guān)鍵代碼和注釋。

ACI通過SQL來訪問神通數(shù)據(jù)庫,因此為了程序能正確運行,首先必須保證SQL語句不出錯,能在神通數(shù)據(jù)庫SQL插件中正常運行。學(xué)生信息數(shù)據(jù)SQL查詢語句為“select * from test.roster order by NUM”。其中test為表空間,roster才是具體表。

可以建立存儲單個學(xué)生的結(jié)構(gòu)體,便于后面綜合信息處理。其代碼如下:

typedef struct{ int ID; char NAME[50]; char SEX[10]; int AGE; char AD[200];}Record;

初始化接口環(huán)境,登錄數(shù)據(jù)庫,準(zhǔn)備SQL語句,再按位置進行數(shù)據(jù)綁定。前面提到這步的重要性,排序位置要正確,同時數(shù)據(jù)類型不能出錯,共五個錄入數(shù)據(jù),因此需要綁定五次,其綁定代碼如下:

r=ACIDefineByPos(m_pStmt,&m_Def,m_pErr,1,(void*)&rec.ID,sizeof(rec.ID),SQLT_INT,0,0,0,ACI_DEFAULT);

r=ACIDefineByPos(m_pStmt,&m_Def,m_pErr,2,(void*)&rec.NAME,sizeof(rec.NAME),SQLT_CLOB,0,0,0,ACI_DEFAULT);

r=ACIDefineByPos(m_pStmt,&m_Def,m_pErr,3,(void*)&rec.SEX,sizeof(rec.SEX),SQLT_CLOB,0,0,0,ACI_DEFAULT);

r=ACIDefineByPos(m_pStmt,&m_Def,m_pErr,1,(void*)&rec.AGE,sizeof(rec.AGE),SQLT_INT,0,0,0,ACI_DEFAULT);

r=ACIDefineByPos(m_pStmt,&m_Def,m_pErr,3,(void*)&rec.AD,sizeof(rec.AD),SQLT_CLOB,0,0,0,ACI_DEFAULT);

數(shù)據(jù)綁定完畢后即可執(zhí)行SQL語句,如果是在數(shù)據(jù)庫中插入數(shù)據(jù),到這里就可以斷開連接和釋放句柄。但是這里是查詢數(shù)據(jù),SQL語句執(zhí)行完畢后,僅把數(shù)據(jù)讀入到內(nèi)存中,還需要循環(huán)取出,經(jīng)過處理最后展示到顯示控件上。這里僅將學(xué)號和年齡合并寫入一個M數(shù)組,便于主函數(shù)讀取處理,其代碼如下:

最后斷開與數(shù)據(jù)庫的連接,并釋放句柄,整個查詢過程就算結(jié)束了。本小節(jié)僅給出部分Qt與神通數(shù)據(jù)庫互聯(lián)的代碼,對于執(zhí)行查詢過程本身自然還有工作需要做,比如需要利用Qt轉(zhuǎn)到槽功能將查詢按鈕與上面的查詢函數(shù)關(guān)聯(lián)起來,略過不提。

5 結(jié)論(Conclusion)

文中使用中標(biāo)麒麟操作系統(tǒng),以開源Qt為開發(fā)工具,對國產(chǎn)神通數(shù)據(jù)庫進行操作。介紹了利用神通數(shù)據(jù)庫自帶的ACI接口,用Qt連接操作數(shù)據(jù)庫的方法,并給出一個相應(yīng)編程實例,展示關(guān)鍵代碼。在例子中實現(xiàn)了簡單的數(shù)據(jù)存儲和讀取,為數(shù)據(jù)安全和自主可控要求高的區(qū)域提供了可行編程思路,是未來關(guān)鍵領(lǐng)域數(shù)據(jù)開發(fā)的可行之道。

參考文獻(References)

[1] Pierson G,DeHaan J.Network Security and Fraud Detection System and Method[P].U.S.Patent.

[2] Yan J,He H,Sun Y.Integrated Security Analysis on Cascading Failure in Complex Networks[J].IEEE Transactions on Information Forensics and Security,2014,9(3):451-463.

[3] Chen Z,et al.Cloud computing-Based Forensic Analysis for Collaborative Network Security Management System[J].Tsinghua Science and Technology,2013,18(1):40-50.

[4] 陸文周.Qt5開發(fā)及實例[M].北京:電子工業(yè)出版社,2014.

[5] 何清法,王澍豐,顧云蘇.國產(chǎn)神通數(shù)據(jù)庫教程[M].西安:西安交通大學(xué)出版社,2012.

作者簡介:

姜家文(1991-),男,碩士,助理工程師.研究領(lǐng)域:軟件開發(fā).

許榮勝(1984-),男,本科,助理工程師.研究領(lǐng)域:軟件開發(fā).

胡振宇(1990-),男,本科,助理工程師.研究領(lǐng)域:軟件開發(fā).