国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      異構(gòu)數(shù)據(jù)庫的統(tǒng)一訪問方法

      文檔序號:6438657閱讀:1071來源:國知局
      專利名稱:異構(gòu)數(shù)據(jù)庫的統(tǒng)一訪問方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及一種數(shù)據(jù)庫訪問方法,具體來說涉及一種異構(gòu)數(shù)據(jù)庫的統(tǒng)一訪問方法。
      背景技術(shù)
      隨著計算機和軟件技術(shù)的不斷發(fā)展,軟件領(lǐng)域的分工也越發(fā)精細,具體體現(xiàn)在不同的行業(yè)、不同的項目甚至同一個項目的不同階段的側(cè)重點完全可能不一樣,所采取的技術(shù)工具、數(shù)據(jù)模型和數(shù)據(jù)庫管理系統(tǒng)都可能完全不盡相同。在數(shù)據(jù)庫管理系統(tǒng)的領(lǐng)域內(nèi),目前就存在著傳統(tǒng)的關(guān)系型數(shù)據(jù)庫管理系(例如 甲骨文公司的Oracle、IBM公司的DB2、Sun公司Syl^ase以及微軟公司的SQLServer等)、實時/歷史數(shù)據(jù)庫系統(tǒng)、對象數(shù)據(jù)庫管理系統(tǒng)。通常,傳統(tǒng)的關(guān)系數(shù)據(jù)庫管理系統(tǒng)都是以SQL 標準對外提供訪存接口,Insert/Select/Update和Delete等標準的SQL語句;而實時/歷史數(shù)據(jù)庫系統(tǒng)和對象數(shù)據(jù)庫系統(tǒng)一般都是以和各種語言綁定的API調(diào)用來提供訪存接口。 因此對于數(shù)據(jù)庫應(yīng)用開發(fā)人員來說,開發(fā)一個應(yīng)用往往需要熟悉和了解各類數(shù)據(jù)庫關(guān)系系統(tǒng)的特性和API (應(yīng)用編程接口)。因此,目前在大型項目中,由于引入了特性各異的數(shù)據(jù)庫管理系統(tǒng),給軟件開發(fā)人員帶來了極大的開發(fā)難度和后期維護難度。一方面數(shù)據(jù)管理的精細化是必然的趨勢,需要引入不同的針對性很強的數(shù)據(jù)庫管理軟件;另外一方面,目前沒有一種行之有效的方法和統(tǒng)一和簡化異構(gòu)數(shù)據(jù)庫的統(tǒng)一訪問技術(shù)?,F(xiàn)在,數(shù)據(jù)庫管理技術(shù)領(lǐng)域一般將數(shù)據(jù)分為如下三種類型a、管理型關(guān)系數(shù)據(jù);b、生產(chǎn)型時序數(shù)據(jù);C、應(yīng)用型模型數(shù)據(jù)。因此如何將各種數(shù)據(jù)抽象統(tǒng)一、歸納整理出一種標準的訪問手段變得尤為迫切。

      發(fā)明內(nèi)容
      本發(fā)明的目的在于提供一種異構(gòu)數(shù)據(jù)庫的統(tǒng)一訪問方法,該方法能夠?qū)崿F(xiàn)通過統(tǒng)一的訪問接口訪問各種異構(gòu)數(shù)據(jù)庫,從而降低數(shù)據(jù)庫應(yīng)用開發(fā)過程中的難度、縮短開發(fā)的時間周期,進一步降低應(yīng)用系統(tǒng)后期的維護成本。本發(fā)明的目的可通過以下的技術(shù)措施來實現(xiàn)一種異構(gòu)數(shù)據(jù)庫的統(tǒng)一訪問方法,包括如下方法步驟一前臺客戶端接收用戶輸入的SQL語句,并將SQL語句請求發(fā)往后臺數(shù)據(jù)庫請求處理程序;步驟二 后臺數(shù)據(jù)庫請求處理程序根據(jù)SQL標準語法分析SQL語句是否合法;如果SQL語句不合法,構(gòu)造錯誤回應(yīng)包給客戶端,然后直接退出本流程;否則,進入下一步;步驟三對請求SQL進行初步語法分析,分解出要操作的虛表表名,然后根據(jù)虛表表名判斷當前的請求是發(fā)向哪類異構(gòu)數(shù)據(jù)庫服務(wù)器的,所述異構(gòu)數(shù)據(jù)庫服務(wù)器的類型包括傳統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng)、實時/歷史數(shù)據(jù)庫系統(tǒng)、對象數(shù)據(jù)庫管理系統(tǒng);其中,實時/歷史數(shù)據(jù)庫系統(tǒng)包括兩張?zhí)摫韺崟r數(shù)據(jù)庫表(RTDBRTVT)和歷史數(shù)據(jù)庫表(RTDBHTVT); 對象數(shù)據(jù)庫管理系統(tǒng)包括三張?zhí)摫砟P蛿?shù)據(jù)表(0DBM0DELVT)、類數(shù)據(jù)表(0DBCLASSVT)和實例數(shù)據(jù)表(ODBINSTANCEVT);如果當前SQL語句中的表名稱是實時數(shù)據(jù)庫表(RTDBRTVT) 或歷史數(shù)據(jù)庫表(RTDBHTVT),則是發(fā)往實時/歷史數(shù)據(jù)庫服務(wù)器的請求;如果當前SQL 語句中的表名稱是模型數(shù)據(jù)表(0DBM0DELVT)、類數(shù)據(jù)表(0DBCLASSVT)或?qū)嵗龜?shù)據(jù)表 (ODBINSTANCEVT),則是發(fā)往對象數(shù)據(jù)庫服務(wù)器的請求;否則默認是發(fā)往傳統(tǒng)關(guān)系數(shù)據(jù)庫服務(wù)器的請求;步驟四根據(jù)步驟三判斷得到的結(jié)果選擇對應(yīng)異構(gòu)數(shù)據(jù)庫服務(wù)器的SQL分析處理器來處理SQL語句中的實際讀寫請求,如果是發(fā)往傳統(tǒng)關(guān)系數(shù)據(jù)庫服務(wù)器的請求則選擇傳統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng)SQL分析處理器(100);發(fā)往實時/歷史數(shù)據(jù)庫服務(wù)器的請求則選擇實時/歷史數(shù)據(jù)庫系統(tǒng)SQL分析處理器O00);發(fā)往對象數(shù)據(jù)庫服務(wù)器的請求則選擇對象數(shù)據(jù)庫管理系統(tǒng)SQL分析處理器(300);各個分析處理器的處理過程如下(1)、所述的傳統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng)SQL分析處理器(100)處理針對傳統(tǒng)關(guān)系數(shù)據(jù)管理系統(tǒng)的讀寫請求,處理的過程如下al)、如果對應(yīng)的傳統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng)的原始API (710)支持標準的SQL語法語句,那么不需要進行轉(zhuǎn)換處理,直接將這個原始請求傳給傳統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng)的原始API (710)調(diào)用執(zhí)行;bl)、如果對應(yīng)的傳統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng)的原始API (710)不支持標準的SQL語法語句,則進行語法轉(zhuǎn)換,將請求中的標準SQL語句通過對應(yīng)的傳統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng)的語法轉(zhuǎn)換器進行轉(zhuǎn)換,并將轉(zhuǎn)換后的SQL語句傳遞給對應(yīng)的傳統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng)的相應(yīng)原始API (710)進行調(diào)用;(2)、所述的實時/歷史數(shù)據(jù)庫系統(tǒng)SQL分析處理器(200)處理針對實時/歷史數(shù)據(jù)庫系統(tǒng)的讀寫請求,處理的過程如下a2)、使用語法分析器第一步分析確定輸入的SQL語法是否符合實時/歷史數(shù)據(jù)庫系統(tǒng)支持的語法,同時分析SQL語句操作類型,要操作的虛表表名,要操作虛擬字段,和要操作的約束條件限制;1^2)、如果當前請求的SQL語句操作類型是對實時/歷史數(shù)據(jù)庫系統(tǒng)的虛表的查詢 (SELECT)、更新(Update)或插入(INSERT)以外的請求動作,則返回失敗;否則進入c2 ;c2)、根據(jù)a2分析出的結(jié)果,調(diào)用實時/歷史數(shù)據(jù)庫系統(tǒng)的相應(yīng)API執(zhí)行相應(yīng)請求;(3)、所述的對象數(shù)據(jù)庫管理系統(tǒng)SQL分析處理器(300)處理針對對象數(shù)據(jù)庫管理系統(tǒng)的讀寫請求,處理的過程如下a3)、使用語法分析器第一步分析確定輸入的SQL語法是否符合對象數(shù)據(jù)庫管理系統(tǒng)支持的語法,同時分析出SQL語句操作類型,要操作的虛表表名,要操作虛擬字段,和要操作的約束條件限制。b3)、如果當前請求的SQL語句操作類型是對對象數(shù)據(jù)庫系統(tǒng)的虛表的查詢 (SELECT)、更新(Update)或插入(INSERT)以外的請求動作,則返回失敗,因為對象數(shù)據(jù)庫系統(tǒng)中的虛表是固定的,不允許創(chuàng)建表、修改表和刪除表等操作;否則進入c3 ;c3)、根據(jù)a3分析出的結(jié)果,調(diào)用對象數(shù)據(jù)庫系統(tǒng)的相應(yīng)API執(zhí)行相應(yīng)請求;
      步驟五將步驟四執(zhí)行后的結(jié)果返回給前臺客戶端。所述支持標準的SQL語法語句的傳統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng)包括Oracle、DB2、 Sybase 禾口 SQL Server。所述步驟(^)的具體過程是根據(jù)a2分析出的SQL語句操作類型以及要操作的虛表表名,判斷執(zhí)行以下不同的步驟如果是INSERT語句并且虛擬表的表名是實時數(shù)據(jù)庫表(RTDBRTVT),則調(diào)用實時/ 歷史數(shù)據(jù)庫系統(tǒng)的實時數(shù)據(jù)插入API來執(zhí)行該請求;如果是INSERT語句并且虛擬表的表名是歷史數(shù)據(jù)庫表(RTDBHTVT),則調(diào)用實時/ 歷史數(shù)據(jù)庫系統(tǒng)的歷史數(shù)據(jù)插入API來執(zhí)行該請求;如果是SELECT語句并且虛擬表的表名是實時數(shù)據(jù)庫表(RTDBRTVT),則調(diào)用實時/ 歷史數(shù)據(jù)庫系統(tǒng)的實時數(shù)據(jù)查詢API來執(zhí)行最終的請求;如果是SELECT語句并且虛擬表的表名是歷史數(shù)據(jù)庫表(RTDBHTVT),則調(diào)用實時/ 歷史數(shù)據(jù)庫系統(tǒng)的歷史數(shù)據(jù)查詢API來執(zhí)行最終的請求;如果是Update語句并且虛擬表的表名是實時數(shù)據(jù)庫表(RTDBRTVT),則調(diào)用實時/ 歷史數(shù)據(jù)庫系統(tǒng)的實時數(shù)據(jù)更新API來執(zhí)行最終的請求;如果是Update語句并且虛擬表的表名是歷史數(shù)據(jù)庫表(RTDBHTVT),則調(diào)用實時/ 歷史數(shù)據(jù)庫系統(tǒng)的歷史數(shù)據(jù)修改API來執(zhí)行最終的請求;如果是Delete語句并且虛擬表的表名是實時數(shù)據(jù)庫表(RTDBRTVT),則該請求屬于非法的一種,實時數(shù)據(jù)是不允許被刪除的;如果是Delete語句并且虛擬表的表名是歷史數(shù)據(jù)庫表(RTDBHTVT),則調(diào)用實時/ 歷史數(shù)據(jù)庫系統(tǒng)的歷史數(shù)據(jù)刪除API來執(zhí)行最終的請求;實時/歷史數(shù)據(jù)庫系統(tǒng)包括兩張?zhí)摫韺崟r數(shù)據(jù)庫表(RTDBRTVT)和歷史數(shù)據(jù)庫表 (RTDBHTVT),其中,所述實時數(shù)據(jù)庫表中存儲實時/歷史數(shù)據(jù)庫系統(tǒng)的標簽編號、數(shù)據(jù)的時間標簽、實時數(shù)值和數(shù)值狀態(tài);歷史數(shù)據(jù)表中存儲實時/歷史數(shù)據(jù)庫系統(tǒng)的標簽編號、數(shù)據(jù)的開始時間標簽、數(shù)據(jù)的結(jié)束時間標簽、歷史數(shù)值和數(shù)值狀態(tài)。所述步驟c3)的具體過程是根據(jù)a3分析出的SQL語句操作類型,要操作的虛表表名,根據(jù)判斷執(zhí)行以下不同的步驟如果是SELECT語句并且表名是模型數(shù)據(jù)表(0DBM0DELVT),則調(diào)用對象數(shù)據(jù)庫系統(tǒng)的模型數(shù)據(jù)查詢API來執(zhí)行最終的請求;如果是INSERT語句并且表名是模型數(shù)據(jù)表(0DBM0DELVT),則調(diào)用對象數(shù)據(jù)庫系統(tǒng)的模型數(shù)據(jù)插入API來執(zhí)行最終的請求;如果是UPDATE語句并且表名是模型數(shù)據(jù)表(0DBM0DELVT),則調(diào)用對象數(shù)據(jù)庫系統(tǒng)的模型數(shù)據(jù)更新API來執(zhí)行最終的請求;如果是Delete語句并且表名是模型數(shù)據(jù)表(0DBM0DELVT),則調(diào)用對象數(shù)據(jù)庫系統(tǒng)的模型數(shù)據(jù)刪除API來執(zhí)行最終的請求;如果是SELECT語句并且表名是類數(shù)據(jù)表(ODBCLASSVT),則調(diào)用對象數(shù)據(jù)庫系統(tǒng)的類數(shù)據(jù)查詢API來執(zhí)行最終的請求;如果是INSERT語句并且表名是類數(shù)據(jù)表(ODBCLASSVT),則調(diào)用對象數(shù)據(jù)庫系統(tǒng)的類數(shù)據(jù)插入API來執(zhí)行最終的請求;
      如果是UPDATE語句并且表名是類數(shù)據(jù)表(0DBCLASSVT),則調(diào)用對象數(shù)據(jù)庫系統(tǒng)的類數(shù)據(jù)更新API來執(zhí)行最終的請求;如果是Delete語句并且表名是類數(shù)據(jù)表(0DBCLASSVT),則調(diào)用對象數(shù)據(jù)庫系統(tǒng)的類數(shù)據(jù)刪除API來執(zhí)行最終的請求;如果是SELECT語句并且表名是實例數(shù)據(jù)表(ODBINSTANCEVT),則調(diào)用對象數(shù)據(jù)庫系統(tǒng)的實例數(shù)據(jù)查詢API來執(zhí)行最終的請求;如果是INSERT語句并且表名是實例數(shù)據(jù)表(ODBINSTANCEVT),則調(diào)用對象數(shù)據(jù)庫系統(tǒng)的實例數(shù)據(jù)插入API來執(zhí)行最終的請求;如果是UPDATE語句并且表名是實例數(shù)據(jù)表(ODBINSTANCEVT),則調(diào)用對象數(shù)據(jù)庫系統(tǒng)的實例數(shù)據(jù)更新API來執(zhí)行最終的請求;如果是Delete語句并且表名是實例數(shù)據(jù)表(ODBINSTANCEVT),則調(diào)用對象數(shù)據(jù)庫系統(tǒng)的實例數(shù)據(jù)刪除API來執(zhí)行最終的請求;對象數(shù)據(jù)庫管理系統(tǒng)包括三張?zhí)摫砟P蛿?shù)據(jù)表(0DBM0DELVT)、類數(shù)據(jù)表 (0DBCLASSVT)和實例數(shù)據(jù)表(ODBINSTANCEVT),其中,模型數(shù)據(jù)表中存儲對象數(shù)據(jù)庫管理系統(tǒng)中的模型名稱、模型類型、創(chuàng)建時間、修改時間、模型描述和子類列表;類數(shù)據(jù)表中存儲對象數(shù)據(jù)庫管理系統(tǒng)中的類名稱、類所屬的包、創(chuàng)建時間、修改時間、類描述和實例列表;實例數(shù)據(jù)表中存儲對象數(shù)據(jù)庫管理系統(tǒng)中的實例名稱、所屬的類、創(chuàng)建時間、修改時間、實例描述和屬性列表。本發(fā)明對比現(xiàn)有技術(shù),有如下優(yōu)點1、本發(fā)明實現(xiàn)了對多種主流異構(gòu)數(shù)據(jù)庫的統(tǒng)一訪問,即實現(xiàn)了統(tǒng)一采用SQL語法語句對多種異構(gòu)數(shù)據(jù)庫進行訪問的方法;2、傳統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng)中的表不是數(shù)據(jù)庫系統(tǒng)中的系統(tǒng)表就是用戶建立的用戶表。而在本方法中,除了傳統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng)中真正存在的物理表,還有實時/歷史數(shù)據(jù)庫系統(tǒng)和對象數(shù)據(jù)庫管理系統(tǒng)的虛擬表,而且這些虛表的結(jié)構(gòu)并不復(fù)雜,大多數(shù)應(yīng)用中只需要關(guān)聯(lián)其中的部分虛表字段。


      圖1是本發(fā)明的異構(gòu)數(shù)據(jù)庫統(tǒng)一方法的系統(tǒng)邏輯結(jié)構(gòu)示意圖;圖2是本發(fā)明的異構(gòu)數(shù)據(jù)庫統(tǒng)一方法的流程圖。
      具體實施例方式如圖1所示,本方法的異構(gòu)數(shù)據(jù)庫統(tǒng)一訪問方法的系統(tǒng)中包括調(diào)用客戶端(0); 傳統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng)SQL分析處理器(100);實時/歷史數(shù)據(jù)庫系統(tǒng)SQL分析處理器O00);對象數(shù)據(jù)庫管理系統(tǒng)SQL分析處理器(300);虛擬表構(gòu)造器000),其中包含實時/歷史數(shù)據(jù)庫系統(tǒng)虛擬表構(gòu)造器(410)和對象數(shù)據(jù)庫系統(tǒng)虛擬表構(gòu)造器G20);數(shù)據(jù)庫原始API (700),其中包含傳統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng)原始API (710)、實時/歷史數(shù)據(jù)庫系統(tǒng)原始API (720)和對象數(shù)據(jù)庫管理系統(tǒng)原始API (730);最后是后臺異構(gòu)數(shù)據(jù)庫服務(wù)器系統(tǒng) (800)。調(diào)用客戶端(0)的是數(shù)據(jù)庫應(yīng)用軟件開發(fā)人員調(diào)用的接口,是本發(fā)明提供給外部的訪問接口。它類似于傳統(tǒng)意義上的應(yīng)用程序開發(fā)接口(API)。其實質(zhì)也是一系列的SQL 語法語句,不同的是這些SQL語法會被解析以辨別當前的請求是發(fā)往后臺的那類數(shù)據(jù)庫系統(tǒng),同時在解析的過程中做一下語法的校驗和驗證操作。傳統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng)SQL分析處理器(100)用于處理針對傳統(tǒng)關(guān)系數(shù)據(jù)管理系統(tǒng)的讀寫請求,將統(tǒng)一訪問的請求轉(zhuǎn)換翻譯成傳統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng)的原始 API (710),通常這種原始的API都是標準的SQL語法語句。傳統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng) Oracle,DB2,Sybase和SQL Server都支持標準的SQL語法語句,傳統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng) SQL分析處理器(100)可以緩沖部分使用頻率很高的數(shù)據(jù)以加快數(shù)據(jù)訪問的速度。實時/歷史數(shù)據(jù)庫系統(tǒng)SQL分析處理器(200)用于處理針對實時/歷史數(shù)據(jù)庫系統(tǒng)的讀寫請求,將統(tǒng)一訪問的請求通過實時/歷史數(shù)據(jù)庫系統(tǒng)虛表構(gòu)造器(410)轉(zhuǎn)換翻譯成實時/歷史數(shù)據(jù)庫系統(tǒng)的原始API (720),通常實時/歷史數(shù)據(jù)庫系統(tǒng)的原始API都是基于標準C語言的函數(shù)接口。主流實時/歷史數(shù)據(jù)庫系統(tǒng)PI和PTimeDB都提供標準C語言的函數(shù)接口,提供實時數(shù)據(jù)寫入、實時數(shù)據(jù)查詢、歷史數(shù)據(jù)查詢和歷史數(shù)據(jù)管理等函數(shù)接口。一般情況下,實時/歷史數(shù)據(jù)庫系統(tǒng)很多讀寫接口中都需要讓調(diào)用者提供內(nèi)存緩存區(qū), 實時/歷史數(shù)據(jù)庫系統(tǒng)SQL分析處理器(200)可以替調(diào)用者智能管理這部分。對象數(shù)據(jù)庫管理系統(tǒng)SQL分析處理器(300)用于處理針對對象數(shù)據(jù)庫管理系統(tǒng)的讀寫請求,將統(tǒng)一訪問的請求通過對象數(shù)據(jù)庫管理系統(tǒng)虛表構(gòu)造器(420)轉(zhuǎn)換翻譯成對象數(shù)據(jù)庫管理系統(tǒng)的原始API (730),通常對象數(shù)據(jù)庫管理系統(tǒng)的原始API都是基于標準C語言的函數(shù)接口。主流對象數(shù)據(jù)庫管理系統(tǒng)db4o和OSpread都提供標準C語言的函數(shù)接口, 提供對模型、類、實例的寫入、查詢、修改和查詢等函數(shù)接口。虛擬表構(gòu)造器(400)包含實時/歷史數(shù)據(jù)庫系統(tǒng)虛擬表構(gòu)造器(410)和對象數(shù)據(jù)庫管理系統(tǒng)虛擬表構(gòu)造器(420)兩部分。在實時/歷史數(shù)據(jù)庫系統(tǒng)中,一般不存在物理的表的概念,因此實時/歷史數(shù)據(jù)庫系統(tǒng)虛擬表構(gòu)造器G10)的主要作用就是將現(xiàn)在實時/歷史數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)模型抽象歸納成和傳統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng)邏輯上一致的表概念。 當然這里的表是“虛表”,也就是邏輯上的概念,而不是物理上實際存在的物理表,因此稱為虛擬表構(gòu)造器。上述異構(gòu)數(shù)據(jù)庫統(tǒng)一訪問技術(shù)中,實時/歷史數(shù)據(jù)庫系統(tǒng)被虛擬成兩張?zhí)摫韺崟r數(shù)據(jù)表RTDBRTVT和歷史數(shù)據(jù)表RTDBHTVT兩張?zhí)摫?,兩張表結(jié)構(gòu)一致,如表1所示
      權(quán)利要求
      1. 一種異構(gòu)數(shù)據(jù)庫的統(tǒng)一訪問方法,其特征在于包括如下方法步驟一前臺客戶端接收用戶輸入的SQL語句,并將SQL語句請求發(fā)往后臺數(shù)據(jù)庫請求處理程序;步驟二 后臺數(shù)據(jù)庫請求處理程序根據(jù)SQL標準語法分析SQL語句是否合法;如果SQL 語句不合法,構(gòu)造錯誤回應(yīng)包給客戶端,然后直接退出本流程;否則,進入下一步;步驟三對請求SQL進行初步語法分析,分解出要操作的虛表表名,然后根據(jù)虛表表名判斷當前的請求是發(fā)向哪類異構(gòu)數(shù)據(jù)庫服務(wù)器的,所述異構(gòu)數(shù)據(jù)庫服務(wù)器的類型包括傳統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng)、實時/歷史數(shù)據(jù)庫系統(tǒng)、對象數(shù)據(jù)庫管理系統(tǒng);其中,實時/歷史數(shù)據(jù)庫系統(tǒng)包括兩張?zhí)摫韺崟r數(shù)據(jù)庫表和歷史數(shù)據(jù)庫表;對象數(shù)據(jù)庫管理系統(tǒng)包括三張?zhí)摫砟P蛿?shù)據(jù)表、類數(shù)據(jù)表和實例數(shù)據(jù)表;如果當前SQL語句中的表名稱是實時數(shù)據(jù)庫表或歷史數(shù)據(jù)庫表,則是發(fā)往實時/歷史數(shù)據(jù)庫服務(wù)器的請求;如果當前SQL語句中的表名稱是模型數(shù)據(jù)表、類數(shù)據(jù)表或?qū)嵗龜?shù)據(jù)表,則是發(fā)往對象數(shù)據(jù)庫服務(wù)器的請求;否則默認是發(fā)往傳統(tǒng)關(guān)系數(shù)據(jù)庫服務(wù)器的請求;步驟四根據(jù)步驟三判斷得到的結(jié)果選擇對應(yīng)異構(gòu)數(shù)據(jù)庫服務(wù)器的SQL分析處理器來處理SQL語句中的實際讀寫請求,如果是發(fā)往傳統(tǒng)關(guān)系數(shù)據(jù)庫服務(wù)器的請求則選擇傳統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng)SQL分析處理器;發(fā)往實時/歷史數(shù)據(jù)庫服務(wù)器的請求則選擇實時/歷史數(shù)據(jù)庫系統(tǒng)SQL分析處理器;發(fā)往對象數(shù)據(jù)庫服務(wù)器的請求則選擇對象數(shù)據(jù)庫管理系統(tǒng) SQL分析處理器;各個分析處理器的處理過程如下(1)、所述的傳統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng)SQL分析處理器處理針對傳統(tǒng)關(guān)系數(shù)據(jù)管理系統(tǒng)的讀寫請求,處理的過程如下al)、如果對應(yīng)的傳統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng)的原始API支持標準的SQL語法語句,那么不需要進行轉(zhuǎn)換處理,直接將這個原始請求傳給傳統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng)的原始API調(diào)用執(zhí)行;bl)、如果對應(yīng)的傳統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng)的原始API不支持標準的SQL語法語句, 則進行語法轉(zhuǎn)換,將請求中的標準SQL語句通過對應(yīng)的傳統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng)的語法轉(zhuǎn)換器進行轉(zhuǎn)換,并將轉(zhuǎn)換后的SQL語句傳遞給對應(yīng)的傳統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng)的相應(yīng)原始 API進行調(diào)用;(2)、所述的實時/歷史數(shù)據(jù)庫系統(tǒng)SQL分析處理器處理針對實時/歷史數(shù)據(jù)庫系統(tǒng)的讀寫請求,處理的過程如下a2)、使用語法分析器第一步分析確定輸入的SQL語法是否符合實時/歷史數(shù)據(jù)庫系統(tǒng)支持的語法,同時分析SQL語句操作類型,要操作的虛表的表名,要操作虛擬字段,和要操作的約束條件限制;b2)、如果當前請求的SQL語句操作類型是對實時/歷史數(shù)據(jù)庫系統(tǒng)的虛表的查詢、更新或插入以外的請求動作,則返回失??;否則進入c2 ;c2)、根據(jù)a2分析出的結(jié)果,調(diào)用實時/歷史數(shù)據(jù)庫系統(tǒng)的相應(yīng)API執(zhí)行相應(yīng)請求;(3)、所述的對象數(shù)據(jù)庫管理系統(tǒng)SQL分析處理器處理針對對象數(shù)據(jù)庫管理系統(tǒng)的讀寫請求,處理的過程如下a3)、使用語法分析器第一步分析確定輸入的SQL語法是否符合對象數(shù)據(jù)庫管理系統(tǒng)支持的語法,同時分析出SQL語句操作類型,要操作的虛表表名,要操作虛擬字段,和要操作的約束條件限制;b3)、如果當前請求的SQL語句操作類型是對對象數(shù)據(jù)庫系統(tǒng)的虛表的查詢、更新或插入以外的請求動作,則返回失敗,因為對象數(shù)據(jù)庫系統(tǒng)中的虛表是固定的,不允許創(chuàng)建表、 修改表和刪除表等操作;否則進入c3 ;c3)、根據(jù)a3)分析出的結(jié)果,調(diào)用對象數(shù)據(jù)庫系統(tǒng)的相應(yīng)API執(zhí)行相應(yīng)請求; 步驟五將步驟四執(zhí)行后的結(jié)果返回給前臺客戶端。
      2.根據(jù)權(quán)利要求1所述的異構(gòu)數(shù)據(jù)庫的統(tǒng)一訪問方法,其特征在于所述支持標準的 SQL語法語句的傳統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng)包括Oracle、DB2、Sybase和SQL Server。
      3.根據(jù)權(quán)利要求1所述的異構(gòu)數(shù)據(jù)庫的統(tǒng)一訪問方法,其特征在于所述步驟c2)的具體過程是根據(jù)步驟a2)分析出的SQL語句操作類型以及要操作的虛表表名,判斷執(zhí)行以下不同的步驟如果是INSERT語句并且虛擬表的表名是實時數(shù)據(jù)庫表,則調(diào)用實時/歷史數(shù)據(jù)庫系統(tǒng)的實時數(shù)據(jù)插入API來執(zhí)行該請求;如果是INSERT語句并且虛擬表的表名是歷史數(shù)據(jù)庫表,則調(diào)用實時/歷史數(shù)據(jù)庫系統(tǒng)的歷史數(shù)據(jù)插入API來執(zhí)行該請求;如果是SELECT語句并且虛擬表的表名是實時數(shù)據(jù)庫表,則調(diào)用實時/歷史數(shù)據(jù)庫系統(tǒng)的實時數(shù)據(jù)查詢API來執(zhí)行最終的請求;如果是SELECT語句并且虛擬表的表名是歷史數(shù)據(jù)庫表,則調(diào)用實時/歷史數(shù)據(jù)庫系統(tǒng)的歷史數(shù)據(jù)查詢API來執(zhí)行最終的請求;如果是Update語句并且虛擬表的表名是實時數(shù)據(jù)庫表,則調(diào)用實時/歷史數(shù)據(jù)庫系統(tǒng)的實時數(shù)據(jù)更新API來執(zhí)行最終的請求;如果是Update語句并且虛擬表的表名是歷史數(shù)據(jù)庫表,則調(diào)用實時/歷史數(shù)據(jù)庫系統(tǒng)的歷史數(shù)據(jù)修改API來執(zhí)行最終的請求;如果是Delete語句并且虛擬表的表名是實時數(shù)據(jù)庫表,則該請求屬于非法的一種,實時數(shù)據(jù)是不允許被刪除的;如果是Delete語句并且虛擬表的表名是歷史數(shù)據(jù)庫表,則調(diào)用實時/歷史數(shù)據(jù)庫系統(tǒng)的歷史數(shù)據(jù)刪除API來執(zhí)行最終的請求。
      4.根據(jù)權(quán)利要求1所述的異構(gòu)數(shù)據(jù)庫的統(tǒng)一訪問方法,其特征在于所述實時/歷史數(shù)據(jù)庫系統(tǒng)包括兩張?zhí)摫韺崟r數(shù)據(jù)庫表和歷史數(shù)據(jù)庫表,其中,所述實時數(shù)據(jù)庫表中存儲實時/歷史數(shù)據(jù)庫系統(tǒng)的標簽編號、數(shù)據(jù)的時間標簽、實時數(shù)值和數(shù)值狀態(tài);歷史數(shù)據(jù)表中存儲實時/歷史數(shù)據(jù)庫系統(tǒng)的標簽編號、數(shù)據(jù)的開始時間標簽、數(shù)據(jù)的結(jié)束時間標簽、歷史數(shù)值和數(shù)值狀態(tài)。
      5.根據(jù)權(quán)利要求1所述的異構(gòu)數(shù)據(jù)庫的統(tǒng)一訪問方法,其特征在于所述步驟c3)的具體過程是根據(jù)步驟a3)分析出的SQL語句操作類型,要操作的虛表表名,根據(jù)判斷執(zhí)行以下不同的步驟如果是SELECT語句并且表名是模型數(shù)據(jù)表,則調(diào)用對象數(shù)據(jù)庫系統(tǒng)的模型數(shù)據(jù)查詢 API來執(zhí)行最終的請求;如果是INSERT語句并且表名是模型數(shù)據(jù)表,則調(diào)用對象數(shù)據(jù)庫系統(tǒng)的模型數(shù)據(jù)插入 API來執(zhí)行最終的請求;如果是UPDATE語句并且表名是模型數(shù)據(jù)表,則調(diào)用對象數(shù)據(jù)庫系統(tǒng)的模型數(shù)據(jù)更新 API來執(zhí)行最終的請求;如果是Delete語句并且表名是模型數(shù)據(jù)表,則調(diào)用對象數(shù)據(jù)庫系統(tǒng)的模型數(shù)據(jù)刪除 API來執(zhí)行最終的請求;如果是SELECT語句并且表名是類數(shù)據(jù)表,則調(diào)用對象數(shù)據(jù)庫系統(tǒng)的類數(shù)據(jù)查詢API來執(zhí)行最終的請求;如果是INSERT語句并且表名是類數(shù)據(jù)表,則調(diào)用對象數(shù)據(jù)庫系統(tǒng)的類數(shù)據(jù)插入API來執(zhí)行最終的請求;如果是UPDATE語句并且表名是類數(shù)據(jù)表,則調(diào)用對象數(shù)據(jù)庫系統(tǒng)的類數(shù)據(jù)更新API來執(zhí)行最終的請求;如果是Delete語句并且表名是類數(shù)據(jù)表,則調(diào)用對象數(shù)據(jù)庫系統(tǒng)的類數(shù)據(jù)刪除API來執(zhí)行最終的請求;如果是SELECT語句并且表名是實例數(shù)據(jù)表,則調(diào)用對象數(shù)據(jù)庫系統(tǒng)的實例數(shù)據(jù)查詢 API來執(zhí)行最終的請求;如果是INSERT語句并且表名是實例數(shù)據(jù)表,則調(diào)用對象數(shù)據(jù)庫系統(tǒng)的實例數(shù)據(jù)插入 API來執(zhí)行最終的請求;如果是UPDATE語句并且表名是實例數(shù)據(jù)表,則調(diào)用對象數(shù)據(jù)庫系統(tǒng)的實例數(shù)據(jù)更新 API來執(zhí)行最終的請求;如果是Delete語句并且表名是實例數(shù)據(jù)表,則調(diào)用對象數(shù)據(jù)庫系統(tǒng)的實例數(shù)據(jù)刪除 API來執(zhí)行最終的請求。
      6.根據(jù)權(quán)利要求1所述的異構(gòu)數(shù)據(jù)庫的統(tǒng)一訪問方法,其特征在于所述對象數(shù)據(jù)庫管理系統(tǒng)包括三張?zhí)摫砟P蛿?shù)據(jù)表、類數(shù)據(jù)表和實例數(shù)據(jù)表,其中,模型數(shù)據(jù)表中存儲對象數(shù)據(jù)庫管理系統(tǒng)中的模型名稱、模型類型、創(chuàng)建時間、修改時間、模型描述和子類列表;類數(shù)據(jù)表中存儲對象數(shù)據(jù)庫管理系統(tǒng)中的類名稱、類所屬的包、創(chuàng)建時間、修改時間、類描述和實例列表;實例數(shù)據(jù)表中存儲對象數(shù)據(jù)庫管理系統(tǒng)中的實例名稱、所屬的類、創(chuàng)建時間、 修改時間、實例描述和屬性列表。
      全文摘要
      本發(fā)明公開了一種異構(gòu)數(shù)據(jù)庫的統(tǒng)一訪問方法,包括步驟前臺客戶端接收用戶輸入的SQL語句,并將SQL語句請求發(fā)往后臺數(shù)據(jù)庫請求處理程序;后臺數(shù)據(jù)庫請求處理程序根據(jù)SQL標準語法分析SQL語句是否合法;對請求SQL進行初步語法分析,分解出要操作的虛表表名,然后根據(jù)虛表表名判斷當前的請求是發(fā)向哪類異構(gòu)數(shù)據(jù)庫服務(wù)器的;根據(jù)步驟三判斷得到的結(jié)果選擇對應(yīng)異構(gòu)數(shù)據(jù)庫服務(wù)器的SQL分析處理器來處理SQL語句中的實際讀寫請求;將步驟四執(zhí)行后的結(jié)果返回給前臺客戶端。該方法能夠?qū)崿F(xiàn)通過統(tǒng)一的訪問接口訪問各種異構(gòu)數(shù)據(jù)庫,從而降低數(shù)據(jù)庫應(yīng)用開發(fā)過程中的難度、縮短開發(fā)的時間周期,進一步降低應(yīng)用系統(tǒng)后期的維護成本。
      文檔編號G06F17/30GK102521254SQ20111036544
      公開日2012年6月27日 申請日期2011年11月17日 優(yōu)先權(quán)日2011年11月17日
      發(fā)明者周伊琳, 孫建偉, 胡亞平, 陳揚, 陳炯聰, 黃縉華 申請人:廣東電網(wǎng)公司電力科學(xué)研究院
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1