本申請涉及數(shù)據(jù)庫
技術(shù)領(lǐng)域:
:,尤其涉及一種異構(gòu)數(shù)據(jù)庫的訪問方法及裝置。
背景技術(shù):
::隨著數(shù)據(jù)庫技術(shù)的發(fā)展及應(yīng)用領(lǐng)域的不斷擴(kuò)大,傳統(tǒng)的數(shù)據(jù)庫系統(tǒng)不能滿足現(xiàn)代數(shù)據(jù)處理的需求,但已有的數(shù)據(jù)庫系統(tǒng)也不可能完全丟棄,因此異構(gòu)數(shù)據(jù)庫系統(tǒng)成為可能。異構(gòu)數(shù)據(jù)庫系統(tǒng)是相關(guān)的多個(gè)數(shù)據(jù)庫系統(tǒng)的集合。異構(gòu)數(shù)據(jù)庫為異構(gòu)數(shù)據(jù)庫系統(tǒng)的各個(gè)數(shù)據(jù)庫,分別具有自己的應(yīng)用特性、完整性控制和安全性控制。異構(gòu)數(shù)據(jù)庫可以是同為關(guān)系型數(shù)據(jù)庫系統(tǒng)的mysql、oracle、sqlserver等。異構(gòu)數(shù)據(jù)庫可以是不同數(shù)據(jù)模型的數(shù)據(jù)庫,如關(guān)系、模式、層次、網(wǎng)絡(luò)、面向?qū)ο螅瘮?shù)型數(shù)據(jù)庫等。異構(gòu)數(shù)據(jù)庫也可以分別運(yùn)行在大型機(jī)、小型機(jī)、工作站、pc或嵌入式系統(tǒng)中。另一方面,隨著互聯(lián)網(wǎng)技術(shù)及軟件技術(shù)的發(fā)展及當(dāng)前信息化的大趨勢下,當(dāng)前的企業(yè)信息化數(shù)據(jù)已經(jīng)逐步形成,但是由于企業(yè)內(nèi)部各單部門根據(jù)自身應(yīng)用的需求,會(huì)選擇不同的數(shù)據(jù)庫類型,比如關(guān)系數(shù)據(jù)庫、樹狀數(shù)據(jù)庫等。目前,在商業(yè)應(yīng)用中,應(yīng)用最為廣泛的數(shù)據(jù)庫類型為關(guān)系型數(shù)據(jù)庫,比如mysql、oracle、sqlserver等。在企業(yè)內(nèi)部,用戶在完成一個(gè)業(yè)務(wù)流程時(shí),由于數(shù)據(jù)形式不一致且分散在不同的數(shù)據(jù)庫內(nèi)因此,通常會(huì)涉及很多的異構(gòu)數(shù)據(jù)庫的操作,比如mysql、oracle,或者即使都使用mysql情況下,可能因?yàn)楦鞣N數(shù)據(jù)庫水平拆分的規(guī)則,分布的不同的物理庫中。因此,用戶在使用傳統(tǒng)的客戶端應(yīng)用程序進(jìn)行數(shù)據(jù)訪問時(shí),都需要先選定 并建立數(shù)據(jù)庫連接后,再執(zhí)行數(shù)據(jù)操作指令,如sql語句,而當(dāng)需要訪問多個(gè)異構(gòu)數(shù)據(jù)庫時(shí),需要在打開的客戶端應(yīng)用程序中頻繁的切換需要訪問的數(shù)據(jù)庫。如此,用戶使用客戶端訪問多個(gè)異構(gòu)數(shù)據(jù)庫時(shí),訪問不方便且效率低。技術(shù)實(shí)現(xiàn)要素:本申請實(shí)施例提供一種異構(gòu)數(shù)據(jù)庫的訪問方法及裝置,用以解決現(xiàn)有技術(shù)中用戶使用客戶端訪問多個(gè)異構(gòu)數(shù)據(jù)庫時(shí),訪問不方便且效率低的問題。本申請實(shí)施例提供一種異構(gòu)數(shù)據(jù)庫的訪問方法,其包括:接收用戶通過客戶端發(fā)送的數(shù)據(jù)庫操作請求對應(yīng)的腳本文件,所述腳本文件包括若干數(shù)據(jù)源指定語句及與每個(gè)數(shù)據(jù)源指定語句對應(yīng)的至少一個(gè)數(shù)據(jù)庫操作語句;解析數(shù)據(jù)庫操作請求對應(yīng)的腳本文件,獲得腳本文件對應(yīng)的腳本對象列表,所述腳本對象列表內(nèi)包括若干腳本對象,每個(gè)腳本對象包括數(shù)據(jù)源標(biāo)識(shí)信息及對所述數(shù)據(jù)源進(jìn)行數(shù)據(jù)庫操作的任務(wù),所述數(shù)據(jù)源標(biāo)識(shí)信息由數(shù)據(jù)源指定語句解析而成,所述數(shù)據(jù)庫操作的任務(wù)由數(shù)據(jù)庫操作語句解析而成;提取所述腳本對象列表中的可執(zhí)行腳本對象,形成可執(zhí)行腳本對象列表;根據(jù)可執(zhí)行腳本對象列表內(nèi)的數(shù)據(jù)源標(biāo)識(shí)信息,獲得數(shù)據(jù)源的連接信息并連接至對應(yīng)的數(shù)據(jù)源;當(dāng)連接到數(shù)據(jù)源后,運(yùn)行可執(zhí)行腳本對象列表中可執(zhí)行腳本對象對應(yīng)的對數(shù)據(jù)源進(jìn)行數(shù)據(jù)庫操作的任務(wù),以實(shí)現(xiàn)數(shù)據(jù)庫操作。進(jìn)一步的,在解析數(shù)據(jù)庫操作請求對應(yīng)的腳本文件之前,所述方法還包括:對接收到的用戶通過客戶端發(fā)送的腳本文件進(jìn)行語法初步驗(yàn)證,若腳本文件內(nèi)的數(shù)據(jù)庫操作語句合法,則解析數(shù)據(jù)庫操作請求對應(yīng)的腳本文件。進(jìn)一步的,所述解析數(shù)據(jù)庫操作請求對應(yīng)的腳本文件,獲得腳本文件對應(yīng)的腳本對象列表,具體包括:通過預(yù)先設(shè)定的數(shù)據(jù)源分隔符,解析腳本文件內(nèi)每條語句,獲得若干腳本 對象;將若干腳本對象拼裝形成腳本對象列表。進(jìn)一步的,所述提取所述腳本對象列表中的可執(zhí)行腳本對象,形成可執(zhí)行腳本對象列表,具體包括:確定所述腳本對象列表內(nèi)每個(gè)腳本對象的數(shù)據(jù)源標(biāo)識(shí)信息對應(yīng)的數(shù)據(jù)源是否存在;若存在,則從腳本對象列表中篩選出其內(nèi)的數(shù)據(jù)源標(biāo)識(shí)信息對應(yīng)的數(shù)據(jù)源存在的腳本對象,而形成可執(zhí)行對象列表。進(jìn)一步的,所述根據(jù)可執(zhí)行腳本對象列表內(nèi)的數(shù)據(jù)源標(biāo)識(shí)信息,獲得數(shù)據(jù)源的連接信息并連接至對應(yīng)的數(shù)據(jù)源,具體包括:根據(jù)可執(zhí)行對象列表內(nèi)每個(gè)可執(zhí)行對象的數(shù)據(jù)源標(biāo)識(shí)信息,獲得對應(yīng)數(shù)據(jù)源的url、用戶名及密碼參數(shù),并通過異構(gòu)數(shù)據(jù)庫統(tǒng)一接口連接至對應(yīng)的數(shù)據(jù)源。進(jìn)一步的,所述方法還包括:接收數(shù)據(jù)庫操作結(jié)果并將其返回客戶端。進(jìn)一步的,所述腳本文件為sql腳本文件,所述數(shù)據(jù)庫操作語句為sql語句,所述腳本對象為sql腳本對象。進(jìn)一步的,所述異構(gòu)數(shù)據(jù)庫統(tǒng)一接口為jbdc接口。進(jìn)一步的,所述數(shù)據(jù)庫操作包括:數(shù)據(jù)庫的數(shù)據(jù)添加、數(shù)據(jù)刪除、數(shù)據(jù)更新及數(shù)據(jù)查詢。本申請實(shí)施例提供一種異構(gòu)數(shù)據(jù)庫的訪問裝置,其包括:第一接收模塊,用于接收用戶通過客戶端發(fā)送的數(shù)據(jù)庫操作請求對應(yīng)的腳本文件,所述腳本文件包括若干數(shù)據(jù)源指定語句及與每個(gè)數(shù)據(jù)源指定語句對應(yīng)的至少一個(gè)數(shù)據(jù)庫操作語句;解析模塊,用于解析數(shù)據(jù)庫操作請求對應(yīng)的腳本文件,獲得腳本文件對應(yīng)的腳本對象列表,所述腳本對象列表內(nèi)包括若干腳本對象,每個(gè)腳本對象包括數(shù)據(jù)源標(biāo)識(shí)信息及對所述數(shù)據(jù)源進(jìn)行數(shù)據(jù)庫操作的任務(wù),所述數(shù)據(jù)源標(biāo)識(shí)信息 與數(shù)據(jù)源指定語句對應(yīng),所述數(shù)據(jù)庫操作的任務(wù)對應(yīng)數(shù)據(jù)庫操作語句;提取模塊,用于提取所述腳本對象列表中的可執(zhí)行腳本對象,形成可執(zhí)行腳本對象列表;連接模塊,用于根據(jù)可執(zhí)行腳本對象列表內(nèi)的數(shù)據(jù)源標(biāo)識(shí)信息,獲得數(shù)據(jù)源的連接信息并連接至對應(yīng)的數(shù)據(jù)源;執(zhí)行模塊,用于當(dāng)連接到數(shù)據(jù)源后,運(yùn)行可執(zhí)行腳本對象列表中可執(zhí)行腳本對象對應(yīng)的對數(shù)據(jù)源進(jìn)行數(shù)據(jù)庫操作的任務(wù),以實(shí)現(xiàn)數(shù)據(jù)庫操作。進(jìn)一步的,所述裝置還包括:語法驗(yàn)證模塊,用于對接收到的用戶通過客戶端發(fā)送的腳本文件進(jìn)行語法初步驗(yàn)證。進(jìn)一步的,所述解析模塊,具體用于:通過預(yù)先設(shè)定的數(shù)據(jù)源分隔符,解析腳本文件內(nèi)每條語句,獲得若干腳本對象;將若干腳本對象拼裝形成腳本對象列表。進(jìn)一步的,所述提取模塊,具體用于:確定所述腳本對象列表內(nèi)每個(gè)腳本對象的數(shù)據(jù)源標(biāo)識(shí)信息對應(yīng)的數(shù)據(jù)源是否存在;若存在,則從腳本對象列表中篩選出其內(nèi)的數(shù)據(jù)源標(biāo)識(shí)信息對應(yīng)的數(shù)據(jù)源存在的腳本對象,而形成可執(zhí)行對象列表。進(jìn)一步的,包括:所述連接模塊,具體用于:根據(jù)可執(zhí)行對象列表內(nèi)每個(gè)可執(zhí)行對象的數(shù)據(jù)源標(biāo)識(shí)信息,獲得對應(yīng)數(shù)據(jù)源的url、用戶名及密碼參數(shù),并通過異構(gòu)數(shù)據(jù)庫統(tǒng)一接口連接至對應(yīng)的數(shù)據(jù)源。進(jìn)一步的,所述裝置還包括:第二接收模塊,具體用于:接收數(shù)據(jù)庫操作結(jié)果并將其返回客戶端。進(jìn)一步的,所述腳本文件為sql腳本文件,所述數(shù)據(jù)庫操作語句為sql 語句,所述腳本對象為sql腳本對象。進(jìn)一步的,所述異構(gòu)數(shù)據(jù)庫統(tǒng)一接口為jbdc接口。進(jìn)一步的,所述數(shù)據(jù)庫操作包括:數(shù)據(jù)庫的數(shù)據(jù)添加、數(shù)據(jù)刪除、數(shù)據(jù)更新及數(shù)據(jù)查詢。與現(xiàn)有技術(shù)相比,由于接收到用戶通過客戶端提交的腳本文件內(nèi)包含若干數(shù)據(jù)源指定語句及與每個(gè)數(shù)據(jù)源指定語句對應(yīng)的至少一個(gè)數(shù)據(jù)庫操作語句,如此,該腳本文件解析后得到的每個(gè)腳本對象內(nèi)包括若干數(shù)據(jù)源標(biāo)識(shí)信息及對所述數(shù)據(jù)源進(jìn)行數(shù)據(jù)庫操作的任務(wù),根據(jù)數(shù)據(jù)源標(biāo)識(shí)信息可以連接到對應(yīng)的數(shù)據(jù)庫并執(zhí)行數(shù)據(jù)庫操作的任務(wù),因此,本申請實(shí)施例提供的一種異構(gòu)數(shù)據(jù)庫的訪問方法及裝置可以一次性對不同的數(shù)據(jù)源進(jìn)行數(shù)據(jù)庫操作,具有數(shù)據(jù)庫連接方便,訪問效率高的特點(diǎn)。附圖說明此處所說明的附圖用來提供對本申請的進(jìn)一步理解,構(gòu)成本申請的一部分,本申請的示意性實(shí)施例及其說明用于解釋本申請,并不構(gòu)成對本申請的不當(dāng)限定。在附圖中:圖1為本申請實(shí)施例提供的異構(gòu)數(shù)據(jù)庫的訪問方法的運(yùn)行環(huán)境示意圖;圖2為本申請實(shí)施例提供的異構(gòu)數(shù)據(jù)庫的訪問方法;圖3為本申請實(shí)施例提供的異構(gòu)數(shù)據(jù)庫的訪問裝置的結(jié)構(gòu)示意圖;圖4為本申請實(shí)施例提供的異構(gòu)數(shù)據(jù)庫的訪問裝置內(nèi)的解析模塊的結(jié)構(gòu)示意圖。具體實(shí)施方式為使本申請的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本申請具體實(shí)施例及相應(yīng)的附圖對本申請技術(shù)方案進(jìn)行清楚、完整地描述。顯然,所描述的實(shí)施例僅是本申請一部分實(shí)施例,而不是全部的實(shí)施例。基于本申請中的實(shí)施 例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本申請保護(hù)的范圍。本申請實(shí)施例提供了一種異構(gòu)數(shù)據(jù)庫的訪問方法及裝置,由于接收到用戶通過客戶端提交的腳本文件內(nèi)包含若干數(shù)據(jù)源指定語句及與每個(gè)數(shù)據(jù)源指定語句對應(yīng)的至少一個(gè)數(shù)據(jù)庫操作語句,如此,該腳本文件解析后得到的每個(gè)腳本對象內(nèi)包括若干數(shù)據(jù)源標(biāo)識(shí)信息及對所述數(shù)據(jù)源進(jìn)行數(shù)據(jù)庫操作的任務(wù),根據(jù)數(shù)據(jù)源標(biāo)識(shí)信息可以連接到對應(yīng)的數(shù)據(jù)庫并執(zhí)行數(shù)據(jù)庫操作的任務(wù),因此,本申請實(shí)施例提供的一種異構(gòu)數(shù)據(jù)庫的訪問方法及裝置可以一次性對不同的數(shù)據(jù)源進(jìn)行數(shù)據(jù)庫操作,具有數(shù)據(jù)庫連接方便,訪問效率高的特點(diǎn)。下面對本申請的技術(shù)方案進(jìn)行詳細(xì)說明。圖2為本申請?zhí)峁┑囊环N異構(gòu)數(shù)據(jù)庫的訪問方法的流程示意圖。如圖2所示,該方法可以包括:步驟101:接收用戶通過客戶端發(fā)送的數(shù)據(jù)庫操作請求對應(yīng)的腳本文件。在本申請實(shí)施例中,客戶端(client)或稱為用戶端、客戶端應(yīng)用程序,是指與服務(wù)器相對應(yīng),為用戶提供異構(gòu)數(shù)據(jù)庫訪問服務(wù)的應(yīng)用程序。異構(gòu)數(shù)據(jù)庫可以為mysql、oracle、sqlserver等關(guān)系型數(shù)據(jù)庫。為了避免應(yīng)用程序與數(shù)據(jù)庫之間的強(qiáng)耦合,本申請實(shí)施例實(shí)際上是提供了一個(gè)中間件,如圖1所示,該中間件提供有應(yīng)用層統(tǒng)一訪問接口及異構(gòu)數(shù)據(jù)庫統(tǒng)一接口,通過應(yīng)用層統(tǒng)一訪問接口接收應(yīng)用程序發(fā)送的數(shù)據(jù)庫操作請求,通過異構(gòu)數(shù)據(jù)庫統(tǒng)一接口連接數(shù)據(jù)庫層。在該應(yīng)用程序運(yùn)行過程中,如果需要執(zhí)行數(shù)據(jù)庫操作,以實(shí)現(xiàn)從相應(yīng)數(shù)據(jù)庫中操作相應(yīng)的數(shù)據(jù),則該應(yīng)用程序可以向該中間件的應(yīng)用層統(tǒng)一訪問接口發(fā)送數(shù)據(jù)庫操作請求。其中,該數(shù)據(jù)庫操作請求為用戶在客戶端內(nèi)輸入的一個(gè)腳本文件。上述腳本文件對應(yīng)數(shù)據(jù)庫操作請求即為用戶訪問異構(gòu)數(shù)據(jù)庫過程中所要執(zhí)行的數(shù)據(jù)庫操作。具體的,該數(shù)據(jù)庫操作包括數(shù)據(jù)庫的數(shù)據(jù)添加(insert)、 數(shù)據(jù)刪除(delete)、數(shù)據(jù)更新(update)及數(shù)據(jù)查詢(select)等操作類型。上述用戶可以包括管理員用戶和普通用戶,管理員用戶的數(shù)據(jù)操作權(quán)限高于普通用戶。比如,管理員用戶登錄上述客戶端應(yīng)用程序可以進(jìn)行數(shù)據(jù)添加、數(shù)據(jù)刪除及數(shù)據(jù)更新的數(shù)據(jù)庫操作,普通用戶登錄上述客戶端應(yīng)用程序僅能進(jìn)行數(shù)據(jù)查詢的數(shù)據(jù)庫操作。上述腳本文件包括若干數(shù)據(jù)源指定語句及與每個(gè)數(shù)據(jù)源指定語句對應(yīng)的至少一個(gè)數(shù)據(jù)庫操作語句??蛇x的,上述腳本文件可以為由結(jié)構(gòu)化查詢語言(sql,structuredquerylanguage)生成的腳本文件,即sql腳本文件,sql腳本文件中包含有多條sql語句。該sql腳本文件內(nèi)包括若干條sql語句,具體的,可以包括若干數(shù)據(jù)源指定語句及與每個(gè)數(shù)據(jù)源指定語句對應(yīng)的用于執(zhí)行數(shù)據(jù)庫操作的至少一條數(shù)據(jù)庫操作語句。在上述至少一條數(shù)據(jù)庫操作語句之上的數(shù)據(jù)源指定語句,通過“--@”自定義格式直接指定數(shù)據(jù)源標(biāo)識(shí)信息,如數(shù)據(jù)庫別名。以下為一個(gè)用戶通過客戶端輸入并發(fā)送的sql腳本文件的示例:--@db=dbexample01select*fromtable01whereid=123select*fromtable02whereid=123--@db=dbexample02select*fromtable05whereid=125上述示例的sql腳本文件中包括第一數(shù)據(jù)源指定語句及與第一數(shù)據(jù)源指定語句對應(yīng)的兩條數(shù)據(jù)庫操作語句,第二數(shù)據(jù)源指定語句及第二數(shù)據(jù)源指定語句對應(yīng)的一條數(shù)據(jù)庫操作語句。第一數(shù)據(jù)源指定語句為“--@db=dbexample01”,第一數(shù)據(jù)源指定語句內(nèi)的第一數(shù)據(jù)源標(biāo)識(shí)信息為“dbexample01”。第二數(shù)據(jù)源指定語句為“--@db=dbexample02”,第二數(shù)據(jù)源指定語句內(nèi) 的第二數(shù)據(jù)源標(biāo)識(shí)信息為“dbexample02”。步驟102:對接收到的用戶通過客戶端發(fā)送的腳本文件進(jìn)行語法初步驗(yàn)證。對接收到的用戶通過客戶端發(fā)送的腳本文件進(jìn)行語法初步驗(yàn)證,具體包括:對接收到的用戶通過客戶端發(fā)送的sql腳本文件內(nèi)的數(shù)據(jù)庫操作語句進(jìn)行語法初步驗(yàn)證。若sql腳本文件內(nèi)的數(shù)據(jù)庫操作語句不合法,構(gòu)造錯(cuò)誤回應(yīng)包給客戶端,然后直接退出本訪問流程。若sql腳本文件內(nèi)的數(shù)據(jù)庫操作語句合法,則進(jìn)行下一步流程。步驟103:解析數(shù)據(jù)庫操作請求對應(yīng)的腳本文件,獲得腳本文件對應(yīng)的腳本對象列表,所述腳本對象列表內(nèi)包括若干腳本對象,每個(gè)腳本對象包括數(shù)據(jù)源標(biāo)識(shí)信息及對所述數(shù)據(jù)源進(jìn)行數(shù)據(jù)庫操作的任務(wù),所述數(shù)據(jù)源標(biāo)識(shí)信息與數(shù)據(jù)源指定語句對應(yīng),所述數(shù)據(jù)庫操作的任務(wù)對應(yīng)數(shù)據(jù)庫操作語句。解析數(shù)據(jù)庫操作請求對應(yīng)的腳本文件,獲得腳本文件對應(yīng)的腳本對象列表,具體包括:通過預(yù)先設(shè)定的數(shù)據(jù)源分隔符,解析sql腳本文件內(nèi)的數(shù)據(jù)源指定語句及數(shù)據(jù)庫操作語句,獲得若干腳本對象;將若干腳本對象拼裝形成腳本對象列表。其中,每個(gè)腳本對象包括數(shù)據(jù)源指定信息及與數(shù)據(jù)庫操作的任務(wù),數(shù)據(jù)源指定信息由數(shù)據(jù)源指定語句解析而來,數(shù)據(jù)庫操作的任務(wù)由數(shù)據(jù)庫操作語句解析而來。繼續(xù)以步驟101中提供的腳本文件為例,該腳本文件中的數(shù)據(jù)源分隔符為換行符,腳本文件解析后形成為三個(gè)腳本對象,三個(gè)腳本對象內(nèi)容具體如下所示。其中,第一腳本對象內(nèi)容如下所示:sql(數(shù)據(jù)庫查詢?nèi)蝿?wù)):select*fromtable01whereid=123dbalias(第一數(shù)據(jù)源標(biāo)識(shí)信息):dbexample01第二腳本對象內(nèi)容如下所示:sql(數(shù)據(jù)庫查詢?nèi)蝿?wù)):select*fromtable02whereid=123dbalias(第一數(shù)據(jù)源標(biāo)識(shí)信息):dbexample01第三腳本對象內(nèi)容如下所示:sql(數(shù)據(jù)庫查詢?nèi)蝿?wù)):select*fromtable05whereid=125dbalias(第二數(shù)據(jù)源標(biāo)識(shí)信息):dbexample02另外,需要說明的是,第一數(shù)據(jù)源標(biāo)識(shí)信息(dbexample01)對應(yīng)的第一數(shù)據(jù)庫與第二數(shù)據(jù)源標(biāo)識(shí)信息(dbexample02)對應(yīng)的第二數(shù)據(jù)庫是異構(gòu)的,比如,第一數(shù)據(jù)庫(dbexample01)可以為oracle數(shù)據(jù)庫,第二數(shù)據(jù)庫(dbexample02)可以為mysql數(shù)據(jù)庫。上述三個(gè)腳本對象可以拼裝成一個(gè)腳本對象列表。每個(gè)腳本對象對應(yīng)一次數(shù)據(jù)庫操作。步驟104:提取所述腳本對象列表中的可執(zhí)行腳本對象,形成可執(zhí)行腳本對象列表。具體的,由于用戶在輸入sql腳本文件的過程中,通過“--@”自定義格式直接指定數(shù)據(jù)源標(biāo)識(shí)信息時(shí),可能會(huì)由于輸入錯(cuò)誤而導(dǎo)致與異構(gòu)數(shù)據(jù)庫系統(tǒng)內(nèi)數(shù)據(jù)源的標(biāo)識(shí)信息不一致,因此,上述sql腳本文件解析后的腳本對象為不可執(zhí)行腳本對象。比如,異構(gòu)數(shù)據(jù)庫系統(tǒng)內(nèi)存在數(shù)據(jù)源標(biāo)識(shí)信息為dbexample01及dbexample02的兩個(gè)數(shù)據(jù)庫,而用戶在輸入sql腳本文件的過程中,通過“--@”自定義格式直接指定了數(shù)據(jù)源標(biāo)識(shí)為dbexsmple01的數(shù)據(jù)庫,而數(shù)據(jù)源標(biāo)識(shí)信息為dbexsmple01對應(yīng)的數(shù)據(jù)庫并不存在于異構(gòu)數(shù)據(jù)庫系統(tǒng)內(nèi),如此,該sql腳本文件解析后的腳本對象為不可執(zhí)行腳本對象。提取所述腳本對象列表中的可執(zhí)行腳本對象,形成可執(zhí)行腳本對象列表,具體包括:確定所述腳本對象列表內(nèi)每個(gè)腳本對象的數(shù)據(jù)源標(biāo)識(shí)信息對應(yīng)的數(shù)據(jù)源是否存在;若存在,則從腳本對象列表中篩選出其內(nèi)的數(shù)據(jù)源標(biāo)識(shí)信息對應(yīng)的數(shù)據(jù)源存在的腳本對象,而形成可執(zhí)行對象列表。需要進(jìn)一步說明的是,確定所述腳本對象列表內(nèi)每個(gè)腳本對象的數(shù)據(jù)源標(biāo)識(shí)信息對應(yīng)的數(shù)據(jù)源是否存在,具體包括:確定腳本對象列表內(nèi)每個(gè)腳本對象內(nèi)的數(shù)據(jù)源識(shí)別信息是否存在數(shù)據(jù)庫標(biāo)識(shí)信息列表內(nèi)。在本申請實(shí)施例中,待訪問的異構(gòu)數(shù)據(jù)庫系統(tǒng)內(nèi)所有的數(shù)據(jù)庫對應(yīng)的數(shù)據(jù)庫標(biāo)識(shí)信息均預(yù)先保存于中間件內(nèi)并形成數(shù)據(jù)庫標(biāo)識(shí)信息列表,因此,比對腳本對象列表內(nèi)的數(shù)據(jù)源識(shí)別信息及數(shù)據(jù)庫識(shí)別信息列表后,就可以確定所述腳本對象列表內(nèi)每個(gè)腳本對象的數(shù)據(jù)源標(biāo)識(shí)信息是否存在于數(shù)據(jù)庫識(shí)別信息列表內(nèi),從而確定所述腳本對象列表內(nèi)每個(gè)腳本對象的數(shù)據(jù)源標(biāo)識(shí)信息對應(yīng)的數(shù)據(jù)源是否存在。步驟105:根據(jù)可執(zhí)行腳本對象列表內(nèi)的數(shù)據(jù)源標(biāo)識(shí)信息,獲得數(shù)據(jù)源的連接信息并連接至對應(yīng)的數(shù)據(jù)源。具體的,客戶端應(yīng)用程序內(nèi)預(yù)存了數(shù)據(jù)源配置文件,用來定義數(shù)據(jù)源的連接信息,如數(shù)據(jù)源的對應(yīng)的url、用戶名及密碼等參數(shù),即待訪問數(shù)據(jù)庫的連接信息。以下為一個(gè)xml數(shù)據(jù)源配置文件的具體示例。<database><alias>dbexample01</string><url>jdbc:oracle:thin:@10.253.34.18:1521:example01</url><username>password</username><password>password</password></database><database><alias>dbexample02</string><url>jdbc:mysql://db01.devdb.alipay.net:3306</url><username>password</username><password>password</password></database>需要說明的,如上述示例數(shù)據(jù)源配置文件所示,該數(shù)據(jù)源配置文件內(nèi)包括了兩個(gè)數(shù)據(jù)源dbexample01、dbexample02的連接信息。根據(jù)可執(zhí)行腳本對象列表內(nèi)的數(shù)據(jù)源標(biāo)識(shí)信息,獲得數(shù)據(jù)源的連接信息并連接至對應(yīng)的數(shù)據(jù)源,具體包括:根據(jù)可執(zhí)行對象列表內(nèi)每個(gè)可執(zhí)行對象的數(shù)據(jù)源標(biāo)識(shí)信息,獲得對應(yīng)數(shù)據(jù)源的url、用戶名及密碼等參數(shù),并通過異構(gòu)數(shù)據(jù)庫統(tǒng)一接口連接至對應(yīng)的數(shù)據(jù)源。具體的,上述異構(gòu)數(shù)據(jù)庫統(tǒng)一接口可以為java數(shù)據(jù)庫連接(jdbc,javadatabaseconnectivity)接口,jdbc是一種特殊的應(yīng)用接口,是用于執(zhí)行sql語句的java應(yīng)用程序接口,基于jdbc技術(shù)訪問數(shù)據(jù)庫,可以很方便地進(jìn)行數(shù)據(jù)庫連接。以上述數(shù)據(jù)源配置文件為例來看,對應(yīng)的數(shù)據(jù)源為oracle數(shù)據(jù)庫及mysql數(shù)據(jù)庫。步驟106:當(dāng)連接到數(shù)據(jù)源后,運(yùn)行可執(zhí)行腳本對象列表中可執(zhí)行腳本對象對應(yīng)的對數(shù)據(jù)源進(jìn)行數(shù)據(jù)庫操作的任務(wù),以實(shí)現(xiàn)數(shù)據(jù)庫操作。運(yùn)行可執(zhí)行腳本對象列表中可執(zhí)行腳本對象對應(yīng)的對數(shù)據(jù)源進(jìn)行數(shù)據(jù)庫操作的任務(wù),以實(shí)現(xiàn)數(shù)據(jù)庫操作,具體包括:依次運(yùn)行可執(zhí)行腳本對象列表中的各個(gè)可執(zhí)行腳本對象對應(yīng)的對數(shù)據(jù)源進(jìn)行數(shù)據(jù)庫操作的任務(wù),以實(shí)現(xiàn)數(shù)據(jù)庫操作。以在步驟103中三個(gè)可執(zhí)行對象為例,依次進(jìn)行的數(shù)據(jù)庫操作,即對數(shù)據(jù)源進(jìn)行數(shù)據(jù)庫操作的任務(wù),分別為:查詢數(shù)據(jù)庫dbexample01內(nèi)表1內(nèi)id號(hào)為123的數(shù)據(jù);查詢數(shù)據(jù)庫dbexample01內(nèi)表2內(nèi)id號(hào)為123的數(shù)據(jù);查詢數(shù)據(jù)庫dbexample02內(nèi)表5內(nèi)id號(hào)為125的數(shù)據(jù)。步驟107:接收數(shù)據(jù)庫操作結(jié)果并將其返回客戶端。以在步驟103中三個(gè)可執(zhí)行對象為例,接收數(shù)據(jù)庫操作結(jié)果并將其返回客戶端,具體包括:接收數(shù)據(jù)庫操作結(jié)果并將數(shù)據(jù)庫操作結(jié)果以表的格式返回客戶端。對應(yīng)本申請的一種異構(gòu)數(shù)據(jù)庫的訪問方法,本申請還提供了一種異構(gòu)數(shù)據(jù)庫的訪問裝置,參見圖3,示出了本申請一種異構(gòu)數(shù)據(jù)庫的訪問裝置的一個(gè)實(shí)施例的結(jié)構(gòu)示意圖,本實(shí)施例的異構(gòu)數(shù)據(jù)庫的訪問裝置位于中間件內(nèi),其可以包括:第一接收模塊201、語法驗(yàn)證模塊202、解析模塊203、提取模塊204、連接模塊205、執(zhí)行模塊206及第二接收模塊207。其中,第一接收模塊201,用于接收用戶通過客戶端發(fā)送的數(shù)據(jù)庫操作請求對應(yīng)的腳本文件,所述腳本文件包括若干數(shù)據(jù)源指定語句及與每個(gè)數(shù)據(jù)源指定語句對應(yīng)的至少一個(gè)數(shù)據(jù)庫操作語句。第一接收模塊201與中間件內(nèi)的應(yīng)用層統(tǒng)一訪問接口連接,從而可以接收用戶通過客戶端發(fā)送的數(shù)據(jù)庫操作請求對應(yīng)的腳本文件。語法驗(yàn)證模塊202,用于對接收到的用戶通過客戶端發(fā)送的腳本文件進(jìn)行語法初步驗(yàn)證,并判斷腳本文件內(nèi)的數(shù)據(jù)庫操作語句是否合法。語法驗(yàn)證模塊202與第一接收模塊201連接。解析模塊203,用于解析數(shù)據(jù)庫操作請求對應(yīng)的腳本文件,獲得腳本文件對應(yīng)的腳本對象列表,所述腳本對象列表內(nèi)包括若干腳本對象,每個(gè)腳本對象包括數(shù)據(jù)源標(biāo)識(shí)信息及對所述數(shù)據(jù)源進(jìn)行數(shù)據(jù)庫操作的任務(wù),所述數(shù)據(jù)源標(biāo)識(shí)信息由數(shù)據(jù)源指定語句解析而來,所述數(shù)據(jù)庫操作的任務(wù)由數(shù)據(jù)庫操作語句解析而來。解析模塊203與語法驗(yàn)證單元202連接。提取模塊204,用于提取所述腳本對象列表中的可執(zhí)行腳本對象,形成可執(zhí)行腳本對象列表。提取模塊204與解析模塊203連接。連接模塊205,用于根據(jù)可執(zhí)行腳本對象列表內(nèi)的數(shù)據(jù)源標(biāo)識(shí)信息,獲得數(shù)據(jù)源的連接信息并連接至對應(yīng)的數(shù)據(jù)源。執(zhí)行模塊206,用于當(dāng)連接到數(shù)據(jù)源后,運(yùn)行可執(zhí)行腳本對象列表中可執(zhí)行腳本對象對應(yīng)的對數(shù)據(jù)源進(jìn)行數(shù)據(jù)庫操作的任務(wù),以實(shí)現(xiàn)數(shù)據(jù)庫操作。第二接收模塊207,用于接收數(shù)據(jù)庫操作結(jié)果并將其返回客戶端。需要進(jìn)一步說明的是,所述解析模塊203,具體用于:通過預(yù)先設(shè)定的數(shù)據(jù)源分隔符,解析腳本文件內(nèi)數(shù)據(jù)源指定語句及數(shù)據(jù)庫操作語句,獲得若干腳本對象;將若干腳本對象拼裝形成腳本對象列表。具體的,上述數(shù)據(jù)源分隔符可以為換行符。需要進(jìn)一步說明的是,如圖4所示,所述提取模塊204,包括:確定單元2041,用于確定所述腳本對象列表內(nèi)每個(gè)腳本對象的數(shù)據(jù)源標(biāo)識(shí)信息對應(yīng)的數(shù)據(jù)源是否存在;篩選單元2042,用于從腳本對象列表中篩選出其內(nèi)的數(shù)據(jù)源標(biāo)識(shí)信息對應(yīng)的數(shù)據(jù)源存在的腳本對象,而形成可執(zhí)行對象列表。提取模塊204與解析模塊203連接。需要進(jìn)一步說明的是,所述連接模塊205,具體用于:根據(jù)可執(zhí)行對象列表內(nèi)每個(gè)可執(zhí)行對象的數(shù)據(jù)源標(biāo)識(shí)信息,獲得對應(yīng)數(shù)據(jù)源的url、用戶名及密碼參數(shù),并通過異構(gòu)數(shù)據(jù)庫統(tǒng)一接口連接至對應(yīng)的數(shù)據(jù)源。連接模塊205與提取模塊204連接,執(zhí)行模塊206與連接模塊205連接。第二接收模塊207與數(shù)據(jù)庫統(tǒng)一接口連接,并通過數(shù)據(jù)庫統(tǒng)一接口來接收數(shù)據(jù)庫操作結(jié)果。另外,本申請實(shí)施例提供的異構(gòu)數(shù)據(jù)庫的訪問裝置內(nèi)還包括:信息保存模塊(未圖示),用于保存數(shù)據(jù)庫層內(nèi)的若干數(shù)據(jù)源對應(yīng)的數(shù)據(jù)庫識(shí)別信息列表,即,用于保存待訪問的異構(gòu)數(shù)據(jù)庫系統(tǒng)內(nèi)所有的數(shù)據(jù)庫對應(yīng)的數(shù)據(jù)庫識(shí)別信息 列表。需要說明的是,優(yōu)選的,所述腳本文件可以為sql腳本文件,所述腳本對象可以為sql腳本對象。另外,所述異構(gòu)數(shù)據(jù)庫統(tǒng)一接口可以為jbdc接口。與現(xiàn)有技術(shù)相比,由于接收到用戶通過客戶端提交的腳本文件內(nèi)包含若干數(shù)據(jù)源指定語句及與每個(gè)數(shù)據(jù)源指定語句對應(yīng)的至少一個(gè)數(shù)據(jù)庫操作語句,如此,該腳本文件解析后得到的每個(gè)腳本對象內(nèi)包括若干數(shù)據(jù)源標(biāo)識(shí)信息及對所述數(shù)據(jù)源進(jìn)行數(shù)據(jù)庫操作的任務(wù),根據(jù)數(shù)據(jù)源標(biāo)識(shí)信息可以連接到對應(yīng)的數(shù)據(jù)庫并執(zhí)行數(shù)據(jù)庫操作的任務(wù),因此,本申請實(shí)施例提供的一種異構(gòu)數(shù)據(jù)庫的訪問方法及裝置可以一次性對不同的數(shù)據(jù)源進(jìn)行數(shù)據(jù)庫操作,具有數(shù)據(jù)庫連接方便,訪問效率高的特點(diǎn)。在20世紀(jì)90年代,對于一個(gè)技術(shù)的改進(jìn)可以很明顯地區(qū)分是硬件上的改進(jìn)(例如,對二極管、晶體管、開關(guān)等電路結(jié)構(gòu)的改進(jìn))還是軟件上的改進(jìn)(對于方法流程的改進(jìn))。然而,隨著技術(shù)的發(fā)展,當(dāng)今的很多方法流程的改進(jìn)已經(jīng)可以視為硬件電路結(jié)構(gòu)的直接改進(jìn)。設(shè)計(jì)人員幾乎都通過將改進(jìn)的方法流程編程到硬件電路中來得到相應(yīng)的硬件電路結(jié)構(gòu)。因此,不能說一個(gè)方法流程的改進(jìn)就不能用硬件實(shí)體模塊來實(shí)現(xiàn)。例如,可編程邏輯器件(programmablelogicdevice,pld)(例如現(xiàn)場可編程門陣列(fieldprogrammablegatearray,fpga))就是這樣一種集成電路,其邏輯功能由用戶對器件編程來確定。由設(shè)計(jì)人員自行編程來把一個(gè)數(shù)字系統(tǒng)“集成”在一片pld上,而不需要請芯片制造廠商來設(shè)計(jì)和制作專用的集成電路芯片2。而且,如今,取代手工地制作集成電路芯片,這種編程也多半改用“邏輯編譯器(logiccompiler)”軟件來實(shí)現(xiàn),它與程序開發(fā)撰寫時(shí)所用的軟件編譯器相類似,而要編譯之前的原始代碼也得用特定的編程語言來撰寫,此稱之為硬件描述語言(hardwaredescriptionlanguage,hdl),而hdl也并非僅有一種,而是有許多種,如abel(advancedbooleanexpressionlanguage)、ahdl(alterahardware descriptionlanguage)、confluence、cupl(cornelluniversityprogramminglanguage)、hdcal、jhdl(javahardwaredescriptionlanguage)、lava、lola、myhdl、palasm、rhdl(rubyhardwaredescriptionlanguage)等,目前最普遍使用的是vhdl(very-high-speedintegratedcircuithardwaredescriptionlanguage)與verilog2。本領(lǐng)域技術(shù)人員也應(yīng)該清楚,只需要將方法流程用上述幾種硬件描述語言稍作邏輯編程并編程到集成電路中,就可以很容易得到實(shí)現(xiàn)該邏輯方法流程的硬件電路??刂破骺梢园慈魏芜m當(dāng)?shù)姆绞綄?shí)現(xiàn),例如,控制器可以采取例如微處理器或處理器以及存儲(chǔ)可由該(微)處理器執(zhí)行的計(jì)算機(jī)可讀程序代碼(例如軟件或固件)的計(jì)算機(jī)可讀介質(zhì)、邏輯門、開關(guān)、專用集成電路(applicationspecificintegratedcircuit,asic)、可編程邏輯控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:arc625d、atmelat91sam、microchippic18f26k20以及siliconelabsc8051f320,存儲(chǔ)器控制器還可以被實(shí)現(xiàn)為存儲(chǔ)器的控制邏輯的一部分。本領(lǐng)域技術(shù)人員也知道,除了以純計(jì)算機(jī)可讀程序代碼方式實(shí)現(xiàn)控制器以外,完全可以通過將方法步驟進(jìn)行邏輯編程來使得控制器以邏輯門、開關(guān)、專用集成電路、可編程邏輯控制器和嵌入微控制器等的形式來實(shí)現(xiàn)相同功能。因此這種控制器可以被認(rèn)為是一種硬件部件,而對其內(nèi)包括的用于實(shí)現(xiàn)各種功能的裝置也可以視為硬件部件內(nèi)的結(jié)構(gòu)?;蛘呱踔?,可以將用于實(shí)現(xiàn)各種功能的裝置視為既可以是實(shí)現(xiàn)方法的軟件模塊又可以是硬件部件內(nèi)的結(jié)構(gòu)。上述實(shí)施例闡明的系統(tǒng)、裝置、模塊或單元,具體可以由計(jì)算機(jī)芯片或?qū)嶓w實(shí)現(xiàn),或者由具有某種功能的產(chǎn)品來實(shí)現(xiàn)。為了描述的方便,描述以上裝置時(shí)以功能分為各種單元分別描述。當(dāng)然,在實(shí)施本申請時(shí)可以把各單元的功能在同一個(gè)或多個(gè)軟件和/或硬件中實(shí)現(xiàn)。本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié) 合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器、cd-rom、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。在一個(gè)典型的配置中,計(jì)算設(shè)備包括一個(gè)或多個(gè)處理器(cpu)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。內(nèi)存可能包括計(jì)算機(jī)可讀介質(zhì)中的非永久性存儲(chǔ)器,隨機(jī)存取存儲(chǔ)器(ram)和/或非易失性內(nèi)存等形式,如只讀存儲(chǔ)器(rom)或閃存(flashram)。內(nèi)存是計(jì)算機(jī)可讀介質(zhì)的示例。計(jì)算機(jī)可讀介質(zhì)包括永久性和非永久性、可移動(dòng)和非可移動(dòng)媒體可以由任何方法或技術(shù)來實(shí)現(xiàn)信息存儲(chǔ)。信息可以是計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計(jì)算機(jī)的存儲(chǔ)介質(zhì)的例子包括,但不限于相變內(nèi)存 (pram)、靜態(tài)隨機(jī)存取存儲(chǔ)器(sram)、動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(dram)、其他類型的隨機(jī)存取存儲(chǔ)器(ram)、只讀存儲(chǔ)器(rom)、電可擦除可編程只讀存儲(chǔ)器(eeprom)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲(chǔ)器(cd-rom)、數(shù)字多功能光盤(dvd)或其他光學(xué)存儲(chǔ)、磁盒式磁帶,磁帶磁磁盤存儲(chǔ)或其他磁性存儲(chǔ)設(shè)備或任何其他非傳輸介質(zhì),可用于存儲(chǔ)可以被計(jì)算設(shè)備訪問的信息。按照本文中的界定,計(jì)算機(jī)可讀介質(zhì)不包括暫存電腦可讀媒體(transitorymedia),如調(diào)制的數(shù)據(jù)信號(hào)和載波。還需要說明的是,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過程、方法、商品或者設(shè)備中還存在另外的相同要素。本領(lǐng)域技術(shù)人員應(yīng)明白,本申請的實(shí)施例可提供為方法、系統(tǒng)或計(jì)算機(jī)程序產(chǎn)品。因此,本申請可采用完全硬件實(shí)施例、完全軟件實(shí)施例或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本申請可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器、cd-rom、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。本申請可以在由計(jì)算機(jī)執(zhí)行的計(jì)算機(jī)可執(zhí)行指令的一般上下文中描述,例如程序模塊。一般地,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等等。也可以在分布式計(jì)算環(huán)境中實(shí)踐本申請,在這些分布式計(jì)算環(huán)境中,由通過通信網(wǎng)絡(luò)而被連接的遠(yuǎn)程處理設(shè)備來執(zhí)行任務(wù)。在分布式計(jì)算環(huán)境中,程序模塊可以位于包括存儲(chǔ)設(shè)備在內(nèi)的本地和遠(yuǎn)程計(jì)算機(jī)存儲(chǔ)介質(zhì)中。本說明書中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,各個(gè)實(shí)施例之間相同相似的部分互相參見即可,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之 處。尤其,對于系統(tǒng)實(shí)施例而言,由于其基本相似于方法實(shí)施例,所以描述的比較簡單,相關(guān)之處參見方法實(shí)施例的部分說明即可。以上所述僅為本申請的實(shí)施例而已,并不用于限制本申請。對于本領(lǐng)域技術(shù)人員來說,本申請可以有各種更改和變化。凡在本申請的精神和原理之內(nèi)所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請的權(quán)利要求范圍之內(nèi)。當(dāng)前第1頁12當(dāng)前第1頁12