• 
    

    
    

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

      ?

      基于XML的異構(gòu)數(shù)據(jù)庫信息交互機制的實現(xiàn)

      2019-01-10 02:05圣文順喬雨邵琳潔
      物聯(lián)網(wǎng)技術(shù) 2019年12期
      關(guān)鍵詞:信息交互

      圣文順 喬雨 邵琳潔

      摘 要:隨著網(wǎng)絡(luò)和數(shù)據(jù)庫技術(shù)的廣泛應(yīng)用,使得不同的業(yè)務(wù)系統(tǒng)之間需要進行更多的數(shù)據(jù)交互。如何便捷高效地在異構(gòu)數(shù)據(jù)庫之間傳輸這些數(shù)據(jù)成為實際應(yīng)用中的一個重要議題。XML憑借其自身極強的平臺適應(yīng)性和可讀性特點,在解決這個問題方面發(fā)揮了積極的作用。介紹了一種基于XML的異構(gòu)數(shù)據(jù)庫信息交互機制,通過實例的方式闡述了該方法具體的實現(xiàn)過程,并且結(jié)合實驗結(jié)果驗證了該方法的可行性。

      關(guān)鍵詞:XML;異構(gòu)數(shù)據(jù)庫;信息交互;Java;JDBC;SQL Server

      中圖分類號:TP391文獻標識碼:A文章編號:2095-1302(2019)12-00-04

      0 引 言

      隨著互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,各種分布式系統(tǒng)被廣泛應(yīng)用,由此產(chǎn)生了大量數(shù)據(jù)交互需求。在現(xiàn)實中,需要交互的系統(tǒng)使用不同數(shù)據(jù)庫的現(xiàn)象非常普遍,為系統(tǒng)間的信息交流帶來了極大不便,有時不得不為每套系統(tǒng)開發(fā)專用的數(shù)據(jù)導(dǎo)入導(dǎo)出工具。為了解決這個問題,我們引入XML(Extensible Markup Language)作為中間媒介來表示需要交互的數(shù)據(jù)。XML是通用的規(guī)范語言,具有操作簡單、可擴展性強等特點,使得它適合作為信息交互的工具[1]。

      1 XML簡介

      XML是一種可擴展的標記語言,由W3C組織于1998年2月制定,它繼承了SGML(Standard Generalized Markup Language)的許多特性,但復(fù)雜性較SGML卻大大降低。XML作為一種建模工具,可以方便地表示數(shù)據(jù)庫中表的屬性,并實現(xiàn)數(shù)據(jù)的存儲[2]。

      XML作為通用的語言規(guī)范,與具體的數(shù)據(jù)平臺無關(guān),在保存數(shù)據(jù)的同時也可以方便地對XML文件中的數(shù)據(jù)進行修改。因此將它作為不同數(shù)據(jù)庫之間交互的統(tǒng)一接口進行數(shù)據(jù)的動態(tài)傳輸和修改[3]。

      2 設(shè)計實現(xiàn)

      2.1 設(shè)計思想

      XML文檔作為數(shù)據(jù)庫信息交互過程中數(shù)據(jù)的載體,首先從源數(shù)據(jù)庫獲取數(shù)據(jù),并按一定的格式存儲為XML文檔,經(jīng)過必要處理后,再將數(shù)據(jù)導(dǎo)入目的數(shù)據(jù)庫,如圖1所示。

      利用XML實現(xiàn)異構(gòu)數(shù)據(jù)庫信息交互的兩個基本步驟[4]如下。

      (1)將源數(shù)據(jù)庫中的數(shù)據(jù)信息導(dǎo)入XML文檔中。

      (2)將XML文檔中的數(shù)據(jù)信息導(dǎo)入目的數(shù)據(jù)庫中:在生成XML文檔時,以數(shù)據(jù)庫表為單位,每張表對應(yīng)生成一個XML文檔;文檔的前半部分記錄表自身的屬性信息,后半部分記錄表中的數(shù)據(jù)。結(jié)構(gòu)如下:

      <...>數(shù)據(jù)表屬性信息

      <...>數(shù)據(jù)

      采用這種方式可以有效地映射出數(shù)據(jù)庫的整體結(jié)構(gòu),并且可以方便地在XML文檔中查詢或者修改數(shù)據(jù)、表屬性及其他中間操作,從而為導(dǎo)入目的數(shù)據(jù)庫階段提供合適的數(shù)據(jù)源。

      2.2 開發(fā)語言

      很多情況下,需要交互的數(shù)據(jù)庫系統(tǒng)位于不同的系統(tǒng)平臺上。Java作為一種流行的編程語言,其普及的關(guān)鍵原因在于其平臺無關(guān)性,只要運行的平臺上裝有JVM(Java虛擬機)就可以執(zhí)行Java程序。因此,將Java作為實現(xiàn)語言的首選[5]。

      JDBC(Java Data Base Connectivity)是一種為Java語言提供連接關(guān)系型數(shù)據(jù)庫的解決方案,它為開發(fā)者提供統(tǒng)一的API并屏蔽底層數(shù)據(jù)庫操作接口的差異性,應(yīng)用程序可以通過JDBC方便地與不同的數(shù)據(jù)庫通信。

      2.3 舉例實現(xiàn)

      以表1、表2中的數(shù)據(jù)為例,表Student中的Nationality為外鍵,對應(yīng)表Nation中的ID。假設(shè)這些表原先存儲在Oracle數(shù)據(jù)庫中,現(xiàn)在要將其中的數(shù)據(jù)映射到SQL Server數(shù)據(jù)庫的表中。

      2.3.1 連接數(shù)據(jù)庫并獲取數(shù)據(jù)庫信息

      利用JDBC連接數(shù)據(jù)庫,先加載Oracle的JDBC驅(qū)動器,然后使用DriverManager來建立數(shù)據(jù)庫連接,方法如下:

      String Driver="oracle.jdbc.driver.OracleDriver";

      String URL="jdbc:oracle:thin:@IP:1521:orcl";

      Class.forName(Driver).newInstance();

      Connection con=DriverManager.getConnection(URL,usemame,password);

      為了成功地將表映射到另一個數(shù)據(jù)庫中,我們需要保存表自身的一些屬性信息,包括表名、包含的列、列的數(shù)據(jù)類型、主外鍵關(guān)系等。由于Oracle數(shù)據(jù)庫提供了專門的系統(tǒng)視圖來記錄這些信息,因此我們只需運用Select語句從中查詢即可。表3中列出了其中的部分視圖,其他大部分數(shù)據(jù)庫如SQL Server等,都有類似的系統(tǒng)視圖供查詢信息。

      2.3.2 把數(shù)據(jù)從Oracle數(shù)據(jù)庫導(dǎo)入XML文檔

      (1)映射表的屬性信息到XML

      獲取屬性信息后,可以將它們保存在DTD文檔中,也可以直接格式化在XML文檔中,這里我們采用后者。

      表Student的屬性映射到XML文檔:

      <?xml version="1.0" encoding="UTF-8"?>

      ID

      NAME

      AGE

      NATIONALITY

      ID

      表Nation的屬性映射到XML文檔:

      <?xml version="1.0" encoding="UtF-8"?>

      ID

      NATION

      ID

      從上面可以看到table標簽包含兩個屬性,其中table_name為表名,fk表示該表是否含有外鍵,若無外鍵,可省略該屬性。columns標簽中包含表中所有的列。以表Nation為例,它包含兩個列,ID和Nation,分別用子標簽col表示。子標簽中的type屬性用來表示列的數(shù)據(jù)類型。

      (2)將表中的數(shù)據(jù)映射到XML

      XML文檔中數(shù)據(jù)的組成模式參考數(shù)據(jù)庫中的數(shù)據(jù)存儲方式,采用數(shù)據(jù)行映射模式。表Student映射成XML文檔:

      <?xml version="1.0" encoding="UtF-8"?>

      001

      張琳娜

      20

      1

      002

      謝志雙

      21

      l

      表Nation映射成XML文檔:

      <?xml version="1.0" encoding="UtF-8"?>

      1

      中國

      2

      美國

      在上面的映射模式中,Rows標簽中包含數(shù)據(jù)庫表所有的行記錄,其中,每個子標簽Row代表一行記錄,而每行的屬性值則用表的列名稱為子標簽進行封裝。

      需要注意的是,XML文檔僅封裝可顯示的文本。若表中的數(shù)據(jù)類型為BLOB等二進制數(shù)據(jù)類型,則需先將該值轉(zhuǎn)換成可顯示的文本值后再進行封裝;通常使用BASE64算法將二進制數(shù)據(jù)轉(zhuǎn)化成可顯示的文本值,Java中也提供相應(yīng)的API,如利用BASE64Encoder和BASE64Decoder完成二進制和可顯示文本的相互轉(zhuǎn)化。

      2.3.3 把數(shù)據(jù)從XML文檔導(dǎo)入SQL Server數(shù)據(jù)庫

      首先需要對XML文檔進行分析,這部分工作需要調(diào)用XML DOM中的API來完成。DOM是由W3C定義的一套用來分析、驗證及更新XML的工具。DOM需要將整篇XML文檔讀入內(nèi)存中,生成一個相應(yīng)的Document實例并對其進行分析[5-6]。

      我們可以從文檔的前半部分得到列的相應(yīng)信息,然后再對Rows標簽中的內(nèi)容進行遍歷分析,進而獲取表中的數(shù)據(jù)。Rows標簽中的內(nèi)容可以看成一個樹型結(jié)構(gòu),如圖2所示,每個葉結(jié)點對應(yīng)一個屬性列,它的值就是我們要導(dǎo)入的數(shù)據(jù)。

      導(dǎo)入數(shù)據(jù)庫的工作利用JDBC完成,可以調(diào)用Statement類中的execute()方法執(zhí)行insert SQL語句實現(xiàn)數(shù)據(jù)導(dǎo)入。建議使用PreparedStatement類代替Statement,因為大多數(shù)情況下導(dǎo)入一個表所需的SQL語句結(jié)構(gòu)是相同的,不同之處在于導(dǎo)入的參數(shù),在這種情況下可以事先用PreparedStatement類對相關(guān)SQL語句進行預(yù)編譯。當(dāng)需要執(zhí)行語句時,只要根據(jù)導(dǎo)入值的數(shù)據(jù)類型選擇相應(yīng)的Set()方法將參數(shù)填入即可,可實現(xiàn)多次重用。在導(dǎo)入表的數(shù)據(jù)量很大時,使用該方式可以大幅提高效率。

      2.3.4 XML文檔導(dǎo)入數(shù)據(jù)庫的順序

      在從XML文檔導(dǎo)入數(shù)據(jù)到數(shù)據(jù)庫時,由于某些表之間存在外鍵約束關(guān)系,使得寫入數(shù)據(jù)時可能會發(fā)生錯誤。我們需要在導(dǎo)入數(shù)據(jù)前檢查此類約束并暫時關(guān)閉,待數(shù)據(jù)導(dǎo)入后再重新啟用。

      對于某些不支持關(guān)閉約束檢查的數(shù)據(jù)庫,我們采用分組導(dǎo)入的方法。將所有的表分成有外鍵和無外鍵兩組,先將無外鍵組的表導(dǎo)入數(shù)據(jù)庫,再導(dǎo)入有外鍵組的表。由于可能出現(xiàn)級聯(lián)外鍵的情況,如圖3所示,因此需要循環(huán)導(dǎo)入有外鍵組的表,直到該組為空。

      (1)將所有的XML文檔按對應(yīng)表中是否存在外鍵分成A,B兩組,按任意順序排序。無外鍵為A組,有外鍵為B組。

      (2)將A組XML文檔中的數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫。

      (3)遍歷B組中的XML文檔,并做操作:獲取table標簽的FK屬性值,并判斷其外鍵依賴的表所對應(yīng)的XML文檔是否在A組中,若已在A組中,則將該文檔中的數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫并將其移至A組;否則,將其留在B組。

      (4)重復(fù)執(zhí)行步驟(3),直至B組為空。

      2.4 性能分析

      由于在導(dǎo)入階段要進行大量數(shù)據(jù)庫寫操作,所以系統(tǒng)的耗時主要集中在XML映射到數(shù)據(jù)庫的階段。其中,若目的數(shù)據(jù)庫允許先關(guān)閉約束檢查再導(dǎo)入,則系統(tǒng)性能主要取決于JDBC對數(shù)據(jù)庫的訪問效率;若目的數(shù)據(jù)庫不支持關(guān)閉約束檢查功能,則需采用本文介紹的分組導(dǎo)入方法。

      利用分組導(dǎo)入方法時,最壞情況為所有的表構(gòu)成一個圖3所示的級聯(lián)外鍵鏈,在這種情況下,B組中有n-1張表。按最壞的情況考慮,系統(tǒng)需要訪問XML文檔的次數(shù)為(n-l)+(n-2)+...+1=(n2-n)/2次。系統(tǒng)對數(shù)據(jù)庫的操作次數(shù)和先關(guān)閉約束檢查再導(dǎo)入的情況相同,每個XML文檔(n2-n)/2次。實踐發(fā)現(xiàn),分組導(dǎo)入方法和先關(guān)閉約束檢查再導(dǎo)入方法性能相當(dāng),雖然后者訪問XML的次數(shù)為n,但是訪問XML文檔的效率卻遠高于訪問數(shù)據(jù)庫的效率,且兩種情況下訪問數(shù)據(jù)庫的次數(shù)相同,因此兩者的性能基本持平。

      3 結(jié) 語

      XML作為數(shù)據(jù)庫中信息交互的載體,具有操作簡單、訪問速度快、平臺無關(guān)性等優(yōu)點??v觀當(dāng)前數(shù)據(jù)庫技術(shù)的發(fā)展趨勢,XML與數(shù)據(jù)庫的結(jié)合越來越緊密,應(yīng)用范圍也越來越廣,我們有理由相信,XML將在數(shù)據(jù)庫應(yīng)用領(lǐng)域發(fā)揮更大的作用。

      參 考 文 獻

      [1]王丹.基于XML的用戶界面模式標記語言UIPML[J].中國科技信息,2019(3).

      [2]王曉剛.基于關(guān)系數(shù)據(jù)庫的XML存儲技術(shù)[J].中國高新技術(shù)企業(yè),2011(5):88-89.

      [3]李金來,吳濤.基于JSON數(shù)據(jù)交換的移動終端與服務(wù)器端異構(gòu)數(shù)據(jù)庫的數(shù)據(jù)交互[J].現(xiàn)代計算機(專業(yè)版),2016(11):55-58.

      [4]劉思.基于XML中間件數(shù)據(jù)庫間信息交換技術(shù)研究[M].天津:天津理工大學(xué),2014.

      [5] HU X L. Practice of CBL Teaching Method in Java Programming Teaching Based on Network Teaching Platform [C]// Proceedings of 2018 5th International Conference on Education,Management,Arts,Economics and Social Science(ICEMAESS 2018),2018.11.10.

      [6]龍鳳.基于XML和中間件的異構(gòu)數(shù)據(jù)庫集成研究[J].電子技術(shù)與軟件工程,2013(10):236.

      [7]鄧林強,胡欣宇,王昕波.基于多源異構(gòu)信息農(nóng)業(yè)的應(yīng)用與實現(xiàn)[J].物聯(lián)網(wǎng)技術(shù),2017,7(11):60-63.

      [8]段繼洲.基于XML的實驗室異構(gòu)數(shù)據(jù)庫同步的設(shè)計與實現(xiàn)[D].成都:電子科技大學(xué),2014.

      [9]賈長云.基于XML的異構(gòu)數(shù)據(jù)庫數(shù)據(jù)交換的研究與實現(xiàn)—校園網(wǎng)信息管理平臺中的數(shù)據(jù)交換[D].南京:河海大學(xué),2005.

      [10]王剛,張江.基于XML的異構(gòu)數(shù)據(jù)庫信息集成的研究與實現(xiàn)[J].電腦與信息技術(shù),2005,13(1):39-42.

      猜你喜歡
      信息交互
      如何補齊當(dāng)前愛國主義輿論引導(dǎo)中的短板
      基于郵件系統(tǒng)的虛擬網(wǎng)絡(luò)社會管理的研究
      万州区| 阿荣旗| 分宜县| 靖边县| 清原| 青岛市| 金乡县| 临汾市| 英超| 建湖县| 大宁县| 黄梅县| 香港 | 新兴县| 长寿区| 罗甸县| 武冈市| 渭源县| 苏尼特左旗| 永平县| 化德县| 闽侯县| 禄丰县| 大田县| 平舆县| 鄂伦春自治旗| 耒阳市| 定襄县| 郴州市| 苍南县| 卓尼县| 正定县| 曲沃县| 平远县| 布拖县| 分宜县| 合肥市| 百色市| 吐鲁番市| 文山县| 千阳县|