999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Qt的神通數(shù)據(jù)庫(kù)與XML文件交互

2018-02-01 12:44:50姜家文韓耀斌賈壯
軟件導(dǎo)刊 2018年1期
關(guān)鍵詞:跨平臺(tái)程序數(shù)據(jù)庫(kù)

姜家文+韓耀斌+賈壯

摘要:

國(guó)內(nèi)外信息安全事件頻發(fā),為保障政府、國(guó)防、金融、電力、機(jī)要、保密等關(guān)鍵領(lǐng)域信息安全,軟件國(guó)產(chǎn)化成為大勢(shì)所趨。Qt開發(fā)工具開源跨平臺(tái);國(guó)產(chǎn)神通數(shù)據(jù)庫(kù)兼容Oracle、移植性強(qiáng);XML格式通用,為程序間數(shù)據(jù)交換必備,三者結(jié)合使軟件國(guó)產(chǎn)化開發(fā)成為可能。闡述了Qt開發(fā)環(huán)境下神通數(shù)據(jù)庫(kù)與xml文件的交互,給出部分代碼,為國(guó)產(chǎn)軟件開發(fā)者提供思路與解決方法。

關(guān)鍵詞:

xml;神通數(shù)據(jù)庫(kù);Qt;軟件開發(fā)交互

DOIDOI:10.11907/rjdk.172195

中圖分類號(hào):TP392

文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào)文章編號(hào):1672-7800(2018)001-0192-03

Abstract:With the domestic and international information security incidents frequently, in order to protect the government, defense, finance, electricity, confidential, confidential and other key areas of information security, software localization become the new trend. Qt development tools which is open source and cross-platform, Shentong database compatible with oracle and portability, XML (Extensible Markup Language) which is format common, and necessary at data exchanging between programs. It makes the localization of software development possible that the combination of the three. In this paper, based on Qt development environment, a brief introduction and some detailed code are given for interaction of Shentong database and xml file, which provideideas and solutions for domestic software developers.

Key Words:xml; Shentong database; Qt; software development; interaction

0引言

近年,國(guó)內(nèi)外各種信息安全事件頻發(fā),特別是“棱鏡門”事件給各國(guó)敲響了警鐘。政府、國(guó)防、金融、電力、機(jī)要、保密等領(lǐng)域信息安全面臨巨大威脅,在信息安全要求高的領(lǐng)域,采用國(guó)產(chǎn)軟件成為大勢(shì)所趨[1-4]。Qt作為一種強(qiáng)大開源跨平臺(tái)開發(fā)工具成為國(guó)產(chǎn)軟件首選開發(fā)工具。神通數(shù)據(jù)庫(kù)作為國(guó)內(nèi)知名有自主知識(shí)產(chǎn)權(quán)的大型通用關(guān)系型數(shù)據(jù)庫(kù),其對(duì)Oracle數(shù)據(jù)庫(kù)強(qiáng)大兼容性與跨平臺(tái)可移植性獲得了國(guó)產(chǎn)軟件開發(fā)者青睞。XML(Extensible Markup Language,可擴(kuò)展標(biāo)記語(yǔ)言)是一種置標(biāo)語(yǔ)言,用于數(shù)據(jù)存儲(chǔ)。XML雖然比二進(jìn)制數(shù)據(jù)占用空間更多,但簡(jiǎn)單易掌握,成為程序間數(shù)據(jù)交換公共語(yǔ)言[5]。XML易與Windows、Linux及其它平臺(tái)信息結(jié)合。通過加載XML數(shù)據(jù),并可以XML格式輸出結(jié)果,在不同程序間傳遞數(shù)據(jù)。XML由W3C制定,其標(biāo)準(zhǔn)化工作由W3C的XML工作組負(fù)責(zé),作為一種共用格式該技術(shù)不會(huì)成為少數(shù)公司盈利工具,因此XML使用極其廣泛。Qt、神通數(shù)據(jù)庫(kù)、XML三者結(jié)合為軟件國(guó)產(chǎn)化創(chuàng)造了條件。

利用Qt針對(duì)神通數(shù)據(jù)庫(kù)進(jìn)行開發(fā),從神通數(shù)據(jù)庫(kù)中讀出相關(guān)數(shù)據(jù),生成標(biāo)準(zhǔn)格式XML作為其它程序初始參數(shù);其它程序生成標(biāo)準(zhǔn)XML也可通過該程序錄入數(shù)據(jù)庫(kù)保存,便于下一次使用,三者關(guān)系如圖1所示。本文先介紹Qt開發(fā)環(huán)境、神通數(shù)據(jù)庫(kù)及XML,再介紹Qt對(duì)神通數(shù)據(jù)庫(kù)與XML的操作,最后給出Qt環(huán)境下神通數(shù)據(jù)庫(kù)與XML交互過程。文中提供部分關(guān)鍵代碼,為需要對(duì)神通

數(shù)據(jù)庫(kù)與XML進(jìn)行交互的開發(fā)者提供思路與解決方法。

1Qt與神通數(shù)據(jù)庫(kù)

1.1Qt5.5

Qt是1991年奇趣科技開發(fā)的跨平臺(tái)C++圖形用戶界面應(yīng)用程序開發(fā)框架[6-7]。它可開發(fā)GUI程序或非GUI程序。Qt是面向?qū)ο蟮目蚣?,使用特殊代碼生成擴(kuò)展以及一些宏,易于擴(kuò)展,允許組件編程。Qt作為開發(fā)工具功能強(qiáng)大,許多著名軟件如Opera瀏覽器、Skype、Google地球等都由Qt開發(fā)。Qt有開源版本并支持跨平臺(tái)運(yùn)行,一次開發(fā)幾乎不需改動(dòng)即能在Windows與麒麟下編譯運(yùn)行,為程序過渡創(chuàng)造條件。本文使用Linux Red-hat開源版Qt5.5,采用可視化編程模式。網(wǎng)上可下載到2種安裝包,一種是源代碼版,安裝前需自己編譯,好處是可根據(jù)需要進(jìn)行適當(dāng)設(shè)置;另一種是已編譯好直接安裝,但安裝過程不可編輯,建議對(duì)Linux系統(tǒng)不熟悉的用戶使用后者。Qt5相對(duì)Qt4改進(jìn)較大,Qt4運(yùn)行Qt5代碼會(huì)出錯(cuò),且Qt4部分代碼Qt5不再支持,因此團(tuán)隊(duì)開發(fā)應(yīng)注意使用同一版本Qt。

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

神通數(shù)據(jù)庫(kù)是一款國(guó)產(chǎn)計(jì)算機(jī)數(shù)據(jù)庫(kù),提供大型關(guān)系型數(shù)據(jù)庫(kù)通用功能,具有豐富數(shù)據(jù)類型、多種索引類型、存儲(chǔ)過程、觸發(fā)器、內(nèi)置函數(shù)、視圖、Package、行級(jí)鎖、完整性約束、多種隔離級(jí)別、在線備份、支持事務(wù)處理等通用特性[8]。系統(tǒng)支持SQL通用數(shù)據(jù)庫(kù)查詢語(yǔ)言,提供多種標(biāo)準(zhǔn)數(shù)據(jù)訪問接口,便于開發(fā)編程;兼容Oracle數(shù)據(jù)庫(kù),便于移植。本文使用神通數(shù)據(jù)庫(kù)管理系統(tǒng)7.0。數(shù)據(jù)庫(kù)必須在root管理員賬戶下安裝,否則創(chuàng)建數(shù)據(jù)庫(kù)時(shí)會(huì)出錯(cuò)。安裝后,可在普通賬戶下使用,但涉及備份、遷移等敏感權(quán)限時(shí)仍需在root管理員賬戶下操作。endprint

1.3QODBC與神通數(shù)據(jù)庫(kù)連接

數(shù)據(jù)庫(kù)提供標(biāo)準(zhǔn)ODBC、JDBC、OLEDB/ADO、NET Framework、ACI等多種數(shù)據(jù)訪問接口。本文采用QODBC連接,即安裝unixodbc驅(qū)動(dòng),配置Qt與odbc鏈接,與數(shù)據(jù)庫(kù)建立一對(duì)一DSNs鏈接,就可使用Qt提供的QtSql相關(guān)類進(jìn)行神通數(shù)據(jù)庫(kù)開發(fā),降低開發(fā)難度與程序復(fù)雜程度。

使用Qt的QtSql相關(guān)類進(jìn)行數(shù)據(jù)庫(kù)操作,需鏈接到sql模塊,即在qmake項(xiàng)目文件.pro中添加如下代碼:

QT+=sql

使用相應(yīng)模塊頭文件必須包含:

#include

#include

程序數(shù)據(jù)庫(kù)連接代碼如下:

QSqlDatabase db=QSqlDatabase::addDatabase("QODBC");

db.setDatabaseName("odsn");

db.setUserName("sysdba");

db.setPassword("szoscar55");

db.open();

2Qt與XML

2.1Qt處理XML方法

XML較強(qiáng)擴(kuò)展性與通用性是基于自身穩(wěn)定嚴(yán)格的基礎(chǔ)規(guī)則。下面給出一個(gè)標(biāo)準(zhǔn)XML案例,后文開發(fā)實(shí)例均是關(guān)于對(duì)該案例的處理。

<?xml version=“1.0” encoding=“UTF-8”?>length

10

cmwidth

5

cmheight

6

cm

對(duì)于一般XML數(shù)據(jù)處理,Qt提供了QtXML模塊,可直接調(diào)用其提供函數(shù),極大減輕編程負(fù)擔(dān)。Qt提供了3種不同應(yīng)用程序接口來讀取XML文檔[9]:①文檔對(duì)象模型(DOM),將XML文檔轉(zhuǎn)為應(yīng)用程序可遍歷屬性結(jié)構(gòu),優(yōu)點(diǎn)是可以任意順序遍歷XML文檔樹形表示,并可用于多通道解法;②QXmlStream,用于讀取格式良好XML文檔的快速解析器,該類最快且最易使用,并提供了兼容其它Qt的應(yīng)用程序編程接口,適合編寫單通道解析器;③XML簡(jiǎn)單應(yīng)用程序編程接口(SAX),通過虛函數(shù)直接向應(yīng)用程序報(bào)告解析事件。

3種模式各有利弊。DOM每一個(gè)子對(duì)象與XML每一個(gè)子節(jié)點(diǎn)對(duì)應(yīng),保留了相同層次結(jié)構(gòu),能夠隨機(jī)訪問XML中節(jié)點(diǎn),但缺點(diǎn)是需將整個(gè)XML文件加載到內(nèi)存,不適合處理較大文件。QXmlStream按階段將文檔讀取到內(nèi)存,通過readNext()讀入一個(gè)節(jié)點(diǎn),然后判斷節(jié)點(diǎn)內(nèi)容,用不同函數(shù)處理不同節(jié)點(diǎn),能處理很大XML文件,但代碼與實(shí)現(xiàn)方式比第一種復(fù)雜。SAX與QXmlStreamReader類似,按節(jié)點(diǎn)順序讀取,但處理方法不同,需調(diào)用已寫好回調(diào)函數(shù),且該函數(shù)為虛函數(shù),不能改變名字,只能根據(jù)傳入?yún)?shù)實(shí)現(xiàn)不同處理,代碼復(fù)雜,較少使用。

XML屬于一種可用文本編輯器編寫的標(biāo)記語(yǔ)言,可直接在Qt中利用字符串拼接(QString)生成XML文檔,并對(duì)字符串進(jìn)行創(chuàng)建與修改,實(shí)現(xiàn)對(duì)XML的生成與修改(需注意特殊符號(hào)<、>、&的轉(zhuǎn)義)。該方式靈活性強(qiáng),可處理非標(biāo)準(zhǔn)格式XML,但代碼復(fù)雜易出錯(cuò),不推薦使用。本文采用文檔對(duì)象模型(DOM)方法處理XML。

2.2DOM方法處理XML

使用Qt中DOM相關(guān)類進(jìn)行XML處理,需連接QtXML模塊,即在qmake項(xiàng)目文件.pro種添加:

QT+=xml

使用相應(yīng)模塊頭文件必須包含:

#include

DOM定義了訪問與操作XML文檔標(biāo)準(zhǔn)方法,將XML文檔作為樹結(jié)構(gòu)查看,可通過DOM樹訪問所有元素及修改或刪除內(nèi)容,并創(chuàng)建新元素。QDomDocument類表示整個(gè)XML文檔,為文檔樹的根,并提供對(duì)文檔樹主要訪問。因?yàn)樵亍⑽谋竟?jié)點(diǎn)、注釋、處理指令等不能存在于文檔上下文之外,則文檔類還應(yīng)包含上述對(duì)象的函數(shù),如QDomNode表示節(jié)點(diǎn)、QDomElement表示元素等。下面給出新建與讀取XML代碼:

QDomDocument doc;

QDomProcessingInstruction i=doc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"UTF-8\"");

doc.appendChild(i);

QDomElement root=doc.createElement("ParamAppoInfo");

doc.appendChild(root);

QString A[]={"ParamName","Value","Unit"};

QString M[]={"length","10","cm","witdth","5","cm","height","6","cm"};

for (int j=0;j<3;j++)

{

QDomElement aa=doc.createElement("Parameter");

root.appendChild(aa);

for(int i=1;i<=3;i++)

{

QDomElement bb=doc.createElement(A[i-1]);

aa.appendChild(bb);

QDomText cc=doc.createTextNode(M[i+j*3]);

bb.appendChild(cc);

}

}

QFile file(filename);

if (!file.open(QIODevice::WriteOnly | QIODevice::

Truncate |QIODevice::Text))

return;

QTextStream out(&file);

out.setCodec("UTF-8");

doc.save(out,4,QDomNode::EncodingFromTextStream);

file.close();

根據(jù)程序不同需求,讀取XML方法有多種。從讀取內(nèi)容可分為有節(jié)點(diǎn)、節(jié)點(diǎn)下的值、屬性等;從讀取方式可分為將所有值都分別讀出,按節(jié)點(diǎn)將值讀出等。這里按節(jié)點(diǎn)順序?qū)⒃刂忻總€(gè)值取出寫進(jìn)一個(gè)字符數(shù)組M,關(guān)鍵代碼如下:

QDomDocument doc;

doc.setContent(&file);

QDomElement root=doc.documentElement();

QDomNode n=root.firstChild();

QString M[100];

int j=0;

while(!n.isNull())

{

QDomElement e=n.toElement();

QDomNodeList list=e.childNodes();

QDomNode t;

for(int i=0;i

{

t=list.at(i);

if(t.isElement())

{

M[i+j*list.count()]=t.toElement().text();

}

}

j++;

n=n.nextSibling();

}

若XML文檔較大,DOM樹最終可能會(huì)占用大量?jī)?nèi)存。對(duì)于此類文檔,QXmlStreamReader類可能是更好解決方案。不過上述方法是適用于大多數(shù)XML處理,因?yàn)槠渲饕糜诔绦蜷g參數(shù)傳遞,而非數(shù)據(jù)保存。

3神通數(shù)據(jù)庫(kù)與XML的簡(jiǎn)單交互

根據(jù)XML文件,在神通數(shù)據(jù)庫(kù)中“TEST”模式下建立一個(gè)名為“長(zhǎng)方體”的表,如圖2所示,共有3列,分別代表“ParamName”、“Value”、“Unit”,數(shù)據(jù)共3行,分別將XML各節(jié)點(diǎn)值填入,即相應(yīng)長(zhǎng)寬高。神通數(shù)據(jù)庫(kù)與XML的交互,是指將XML各節(jié)點(diǎn)值錄入數(shù)據(jù)庫(kù),同時(shí)能讀取數(shù)據(jù)庫(kù)生成XML。實(shí)現(xiàn)這個(gè)過程需用到SQL(Structured Query Language)語(yǔ)句,即結(jié)構(gòu)化查詢語(yǔ)言。讀取數(shù)據(jù)時(shí),使用“SELECT”語(yǔ)句,錄入時(shí)使用“INSERT INTO”語(yǔ)句[10]。通過QODBC可使神通數(shù)據(jù)庫(kù)直接運(yùn)行SQL語(yǔ)句,注意SQL語(yǔ)句語(yǔ)法格式。

讀取數(shù)據(jù)庫(kù)關(guān)鍵代碼如下(sql字符串中注意轉(zhuǎn)義字符“\”使用),最后得到以M字符數(shù)組為順序的XML每個(gè)節(jié)點(diǎn)值:

QString sql=" select*from \"測(cè)試\".\"長(zhǎng)方體\"";

QSqlQuery query;

query.exec(sql);

int c=1;

int num=0;

while (query.next())

{

for(int i=0;i<=14;i++)

{

M[c]=query.value(i).toString();

c++;

}

}

錄入數(shù)據(jù)庫(kù)時(shí),為簡(jiǎn)化程序,寫入前先處理得到的XML字符數(shù)組,一次插入一行。寫入數(shù)據(jù)庫(kù)時(shí)需注意SQL語(yǔ)句語(yǔ)法,特別是轉(zhuǎn)義字符與半角逗號(hào)的使用。寫入數(shù)據(jù)庫(kù)關(guān)鍵代碼如下:

for(int i=0;i<3;i++)

{

MM[j]=MM[j]+ " ' " +M[i+j*3]+ " ' " + ",";

}

int length=M[j].length();

M[j].remove(length-1,length);

for(int i=0;i<3;i++)

{

QString sql="insert into "+ " \"TEST\".\"長(zhǎng)方體\"" + " values (" + MM[i] + ")";

QSqlQuery query;

query.exec(sql);

}

上面2段代碼實(shí)現(xiàn)了數(shù)據(jù)庫(kù)與XML的簡(jiǎn)單交互。對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作前,需如上文所給代碼利用QODBC將其打開。

4結(jié)語(yǔ)

XML簡(jiǎn)單易用特性使其成為數(shù)據(jù)交換唯一公共語(yǔ)言,越來越多應(yīng)用于各類程序開發(fā);Qt作為一種跨平臺(tái)、開源可視化編程工具,越來越受歡迎;神通數(shù)據(jù)庫(kù)作為國(guó)產(chǎn)數(shù)據(jù)庫(kù)翹楚,成為國(guó)產(chǎn)軟件開發(fā)者首選。本文闡述了Qt開發(fā)環(huán)境下神通數(shù)據(jù)庫(kù)與XML文件的交互,介紹了從神通數(shù)據(jù)庫(kù)讀取相關(guān)數(shù)據(jù),生成標(biāo)準(zhǔn)格式XML錄入數(shù)據(jù)庫(kù)保存的方法并給出關(guān)鍵代碼,為需要進(jìn)行神通數(shù)據(jù)庫(kù)與XML交互的開發(fā)者提供思路與解決辦法。

參考文獻(xiàn):

[1]PIERSON G,DEHAAN J.Network security and fraud detection system and method[P].U.S.,9203837,2015-12-01.

[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]馮登國(guó),張陽(yáng),張玉清.信息安全風(fēng)險(xiǎn)評(píng)估綜述[J].通信學(xué)報(bào),2004,25(7):10-18.

[4]彭珺,高珺.計(jì)算機(jī)網(wǎng)絡(luò)信息安全及防護(hù)策略研究[J].計(jì)算機(jī)與數(shù)字工程,2011,39(1):121-124.

[5]亨特,拉夫特,福特斯,等.XML入門經(jīng)典[M].吳文國(guó),譯.北京:清華大學(xué)出版社,2013.

[6]陸文周.Qt5開發(fā)及實(shí)例[M].青島:電子工業(yè)出版社,2014.

[7]霍亞飛,程梁.Qt 5編程入門[M].北京:北京航空航天大學(xué)出版社,2015.

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

[9]霍亞飛.QtCreator快速入門[M].北京:北京航空航天大學(xué)出版社,2013.

[10]威爾頓,科爾比.SQL入門經(jīng)典[M].敖富江,譯.北京:清華大學(xué)出版社,2006.

(責(zé)任編輯:何麗)endprint

猜你喜歡
跨平臺(tái)程序數(shù)據(jù)庫(kù)
試論我國(guó)未決羈押程序的立法完善
跨平臺(tái)APEX接口組件的設(shè)計(jì)與實(shí)現(xiàn)
“程序猿”的生活什么樣
英國(guó)與歐盟正式啟動(dòng)“離婚”程序程序
數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)
創(chuàng)衛(wèi)暗訪程序有待改進(jìn)
基于QT的跨平臺(tái)輸電鐵塔監(jiān)控終端軟件設(shè)計(jì)與實(shí)現(xiàn)
主站蜘蛛池模板: 国产特一级毛片| 亚洲高清中文字幕在线看不卡| 免费AV在线播放观看18禁强制| 天天色天天综合| 99这里只有精品免费视频| 国产乱子伦视频三区| 色久综合在线| 99人体免费视频| 成人午夜视频免费看欧美| 亚洲国产成人自拍| 一级毛片免费观看不卡视频| 国产精品hd在线播放| 美女被躁出白浆视频播放| 国产视频大全| 国产情精品嫩草影院88av| 67194在线午夜亚洲 | 精品91在线| 欧美一级在线播放| 亚洲精品大秀视频| 综合色88| 国产久操视频| 国模私拍一区二区| 99在线观看免费视频| 美女无遮挡免费网站| 天堂在线视频精品| 国产理论一区| 99热最新网址| 亚洲视频免| 久久精品国产一区二区小说| 99精品免费欧美成人小视频| 99国产精品免费观看视频| 香蕉99国内自产自拍视频| 日韩精品免费在线视频| 日本亚洲国产一区二区三区| 亚洲精品视频在线观看视频| 国产高清无码麻豆精品| 亚洲午夜福利精品无码不卡| 国产一级视频久久| 天天干伊人| 久久狠狠色噜噜狠狠狠狠97视色| 欧美区一区| 欧美日韩国产高清一区二区三区| 欧美成人综合视频| 欧美亚洲一区二区三区在线| 青青操视频在线| 婷婷六月激情综合一区| 欧美三级不卡在线观看视频| 国产乱人视频免费观看| 日韩精品视频久久| 久久五月视频| 999精品在线视频| 久久香蕉国产线看观| 中文字幕中文字字幕码一二区| 大香伊人久久| 国产成人1024精品| 亚洲最新地址| 欧美97欧美综合色伦图| 国产精品第一区| 亚洲欧洲日产国码无码av喷潮| 久久永久免费人妻精品| 大陆精大陆国产国语精品1024 | 亚洲AV无码不卡无码| 国产男女免费视频| 找国产毛片看| 九色在线观看视频| 五月婷婷欧美| 99无码中文字幕视频| 亚洲精品午夜天堂网页| 国产高清国内精品福利| 制服丝袜亚洲| 69综合网| 国产经典三级在线| 久久精品91麻豆| 性网站在线观看| 久久久噜噜噜| 国产精品久久久久久久久kt| 天天色天天综合网| 久久无码av三级| 四虎精品免费久久| 国产精品va| 色天天综合| 国产99热|