• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

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

      姜家文+許榮勝+胡振宇

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

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

      中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼: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)

      近年來(lái),國(guó)外各種信息安全事件頻發(fā),特別是“棱鏡門(mén)”事件給各個(gè)國(guó)家敲響了信息安全的警鐘。采用國(guó)外開(kāi)發(fā)的閉源操作系統(tǒng)和軟件可能引入未知后門(mén),對(duì)政府、國(guó)防、金融、電力、機(jī)要、保密等領(lǐng)域的安全帶來(lái)潛在的隱患[1-3]。2014年5月16日,中國(guó)政府采購(gòu)網(wǎng)發(fā)布《關(guān)于進(jìn)行信息類(lèi)協(xié)議供貨強(qiáng)制節(jié)能產(chǎn)品補(bǔ)充招標(biāo)的通知》,其中明確要求計(jì)算機(jī)類(lèi)產(chǎn)品不允許安裝微軟Windows 8操作系統(tǒng)。因此在信息安全要求高的領(lǐng)域,采用國(guó)產(chǎn)系統(tǒng)和開(kāi)源軟件為大勢(shì)所趨。本文采用中標(biāo)麒麟為操作系統(tǒng),以開(kāi)源Qt為開(kāi)發(fā)軟件,對(duì)國(guó)產(chǎn)神通數(shù)據(jù)庫(kù)進(jìn)行操作編輯,實(shí)現(xiàn)需要數(shù)據(jù)庫(kù)情景下的軟件基本編程,為關(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)軟件有限公司研制推出的國(guó)內(nèi)首款自主可控、高安全等級(jí)可信操作系統(tǒng),全稱(chēng)為中標(biāo)麒麟可信操作系統(tǒng)軟件。結(jié)合可信計(jì)算機(jī)技術(shù)和操作系統(tǒng)安全技術(shù),中標(biāo)麒麟通過(guò)信任鏈的建立及傳遞實(shí)現(xiàn)對(duì)平臺(tái)軟硬件的完整性度量;提供基于三權(quán)分立機(jī)制的多項(xiàng)安全功能和統(tǒng)一的安全控制中心;全面支持國(guó)內(nèi)外可信計(jì)算規(guī)范(TCM/TPCM、TPM2.0);兼容主流的軟硬件和自主CPU平臺(tái),如飛騰、龍芯、申威。文中所用的軟件版本為Neoky Lin3.2。現(xiàn)階段麒麟系統(tǒng)安裝已友好化,可全程傻瓜式安裝,但中途注意不要忘記勾選安裝所需要的開(kāi)發(fā)環(huán)境和工具包。

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

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

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

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

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

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

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

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

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

      4.1 例子背景

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

      4.2 設(shè)計(jì)思路

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

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

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

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

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

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

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

      初始化接口環(huán)境,登錄數(shù)據(jù)庫(kù),準(zhǔn)備SQL語(yǔ)句,再按位置進(jìn)行數(shù)據(jù)綁定。前面提到這步的重要性,排序位置要正確,同時(shí)數(shù)據(jù)類(lèi)型不能出錯(cuò),共五個(gè)錄入數(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語(yǔ)句,如果是在數(shù)據(jù)庫(kù)中插入數(shù)據(jù),到這里就可以斷開(kāi)連接和釋放句柄。但是這里是查詢(xún)數(shù)據(jù),SQL語(yǔ)句執(zhí)行完畢后,僅把數(shù)據(jù)讀入到內(nèi)存中,還需要循環(huán)取出,經(jīng)過(guò)處理最后展示到顯示控件上。這里僅將學(xué)號(hào)和年齡合并寫(xiě)入一個(gè)M數(shù)組,便于主函數(shù)讀取處理,其代碼如下:

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

      5 結(jié)論(Conclusion)

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

      參考文獻(xiàn)(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開(kāi)發(fā)及實(shí)例[M].北京:電子工業(yè)出版社,2014.

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

      作者簡(jiǎn)介:

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

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

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

      富宁县| 永宁县| 德安县| 延津县| 綦江县| 吴桥县| 丰镇市| 洛隆县| 调兵山市| 连南| 霍林郭勒市| 涟源市| 盘山县| 陕西省| 清水县| 新平| 千阳县| 仲巴县| 瑞昌市| 吉安县| 安义县| 根河市| 于田县| 甘孜县| 两当县| 黑水县| 开化县| 台中市| 林州市| 嘉义市| 朔州市| 内江市| 玉门市| 曲阜市| 南皮县| 嘉禾县| 哈密市| 临潭县| 建平县| 明星| 平和县|