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

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

2019-01-10 02:05:54圣文順喬雨邵琳潔
物聯(lián)網(wǎng)技術(shù) 2019年12期

圣文順 喬雨 邵琳潔

摘 要:隨著網(wǎng)絡(luò)和數(shù)據(jù)庫技術(shù)的廣泛應用,使得不同的業(yè)務系統(tǒng)之間需要進行更多的數(shù)據(jù)交互。如何便捷高效地在異構(gòu)數(shù)據(jù)庫之間傳輸這些數(shù)據(jù)成為實際應用中的一個重要議題。XML憑借其自身極強的平臺適應性和可讀性特點,在解決這個問題方面發(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)被廣泛應用,由此產(chǎn)生了大量數(shù)據(jù)交互需求。在現(xiàn)實中,需要交互的系統(tǒng)使用不同數(shù)據(jù)庫的現(xiàn)象非常普遍,為系統(tǒng)間的信息交流帶來了極大不便,有時不得不為每套系統(tǒng)開發(fā)專用的數(shù)據(jù)導入導出工具。為了解決這個問題,我們引入XML(Extensible Markup Language)作為中間媒介來表示需要交互的數(shù)據(jù)。XML是通用的規(guī)范語言,具有操作簡單、可擴展性強等特點,使得它適合作為信息交互的工具[1]。

1 XML簡介

XML是一種可擴展的標記語言,由W3C組織于1998年2月制定,它繼承了SGML(Standard Generalized Markup Language)的許多特性,但復雜性較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ù)導入目的數(shù)據(jù)庫,如圖1所示。

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

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

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

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

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

采用這種方式可以有效地映射出數(shù)據(jù)庫的整體結(jié)構(gòu),并且可以方便地在XML文檔中查詢或者修改數(shù)據(jù)、表屬性及其他中間操作,從而為導入目的數(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ù)庫操作接口的差異性,應用程序可以通過JDBC方便地與不同的數(shù)據(jù)庫通信。

2.3 舉例實現(xiàn)

以表1、表2中的數(shù)據(jù)為例,表Student中的Nationality為外鍵,對應表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ù)庫導入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中也提供相應的API,如利用BASE64Encoder和BASE64Decoder完成二進制和可顯示文本的相互轉(zhuǎn)化。

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

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

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

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

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

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

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

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

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

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

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

2.4 性能分析

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

利用分組導入方法時,最壞情況為所有的表構(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)閉約束檢查再導入的情況相同,每個XML文檔(n2-n)/2次。實踐發(fā)現(xiàn),分組導入方法和先關(guān)閉約束檢查再導入方法性能相當,雖然后者訪問XML的次數(shù)為n,但是訪問XML文檔的效率卻遠高于訪問數(shù)據(jù)庫的效率,且兩種情況下訪問數(shù)據(jù)庫的次數(shù)相同,因此兩者的性能基本持平。

3 結(jié) 語

XML作為數(shù)據(jù)庫中信息交互的載體,具有操作簡單、訪問速度快、平臺無關(guān)性等優(yōu)點。縱觀當前數(shù)據(jù)庫技術(shù)的發(fā)展趨勢,XML與數(shù)據(jù)庫的結(jié)合越來越緊密,應用范圍也越來越廣,我們有理由相信,XML將在數(shù)據(jù)庫應用領(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ù)交換的移動終端與服務器端異構(gòu)數(shù)據(jù)庫的數(shù)據(jù)交互[J].現(xiàn)代計算機(專業(yè)版),2016(11):55-58.

[4]劉思.基于XML中間件數(shù)據(jù)庫間信息交換技術(shù)研究[M].天津:天津理工大學,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è)的應用與實現(xiàn)[J].物聯(lián)網(wǎng)技術(shù),2017,7(11):60-63.

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

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

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

主站蜘蛛池模板: 久久久久人妻一区精品色奶水| 精品无码国产自产野外拍在线| 伊人久综合| 欧美一区二区三区不卡免费| 野花国产精品入口| 国产福利影院在线观看| 国产香蕉一区二区在线网站| 久久久久夜色精品波多野结衣| 国产99精品久久| 亚洲高清在线天堂精品| 久久久国产精品无码专区| 亚洲色图综合在线| 一级毛片网| 国产女人在线视频| 色欲不卡无码一区二区| 国产91丝袜在线播放动漫 | 性视频久久| 五月婷婷欧美| 成人免费一区二区三区| 不卡无码h在线观看| av一区二区三区在线观看| 草逼视频国产| 亚洲二区视频| 高清大学生毛片一级| 国产日产欧美精品| 亚洲国产精品不卡在线| 免费一级毛片在线播放傲雪网 | 91九色国产porny| 久久a级片| 欧美激情综合一区二区| 久久久精品无码一二三区| 欧美a在线| 成人在线不卡| 青青网在线国产| 国产chinese男男gay视频网| 日韩国产黄色网站| 无码福利日韩神码福利片| 亚洲欧美精品在线| 日韩欧美成人高清在线观看| 大香网伊人久久综合网2020| 精品国产香蕉伊思人在线| 97青青青国产在线播放| 中日无码在线观看| 女人毛片a级大学毛片免费| 欧美一级在线播放| 国产95在线 | 在线精品欧美日韩| 亚洲欧洲日产无码AV| 好吊妞欧美视频免费| www.亚洲天堂| 中文字幕久久亚洲一区| 婷婷激情亚洲| 国产青榴视频在线观看网站| 亚洲国产精品一区二区第一页免| 国产欧美日韩va另类在线播放| 超碰精品无码一区二区| 全部毛片免费看| 亚洲精品免费网站| 国产在线精品人成导航| 久久久久亚洲AV成人人电影软件| 国产午夜无码专区喷水| 久久99国产综合精品1| 亚洲第一成年人网站| 亚洲精品爱草草视频在线| 依依成人精品无v国产| 亚洲色图在线观看| 久久久久亚洲精品成人网| 美女一级毛片无遮挡内谢| 国产精品原创不卡在线| 亚洲高清中文字幕| 亚洲欧州色色免费AV| 中文字幕在线欧美| 国产91丝袜在线播放动漫| 亚洲色图欧美激情| 91视频首页| 五月激情婷婷综合| 日韩欧美91| 欧美日韩精品在线播放| 91色爱欧美精品www| 97成人在线视频| 四虎国产永久在线观看| 亚洲精品手机在线|