欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種數(shù)據(jù)庫(kù)查詢方法及裝置的制作方法

文檔序號(hào):6584731閱讀:228來源:國(guó)知局
專利名稱:一種數(shù)據(jù)庫(kù)查詢方法及裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及數(shù)據(jù)庫(kù)技術(shù)領(lǐng)域,特別是涉及一種數(shù)據(jù)庫(kù)查詢方法及裝置。
背景技術(shù)
SQL (Structured Query Language,結(jié)構(gòu)化查詢語言)是專為數(shù)據(jù)庫(kù)而建立的操作 命令集,是一種數(shù)據(jù)庫(kù)語言。SQL的主要功能就是同各種數(shù)據(jù)庫(kù)建立聯(lián)系,使不同類型的數(shù) 據(jù)庫(kù)之間進(jìn)行溝通。按照ANSI(美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì))的規(guī)定,SQL被作為關(guān)系型數(shù)據(jù)庫(kù)管 理系統(tǒng)的標(biāo)準(zhǔn)語言。在使用SQL時(shí),只需要發(fā)出"做什么"的命令,而不需要考慮"怎么做"。 SQL語句可以用來執(zhí)行對(duì)數(shù)據(jù)庫(kù)的各種各樣的操作,例如更新數(shù)據(jù)庫(kù)中的數(shù)據(jù),從數(shù)據(jù)庫(kù)中 提取數(shù)據(jù)等。目前,絕大多數(shù)流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),如Oracle, Sybase,Microsoft SQL Server, Access等都采用了 SQL語言標(biāo)準(zhǔn)。 現(xiàn)有技術(shù)中,對(duì)系統(tǒng)中的不同類型數(shù)據(jù)庫(kù)進(jìn)行查詢時(shí),采用了條件判斷的方式來 解決對(duì)不同類型數(shù)據(jù)庫(kù)的SQL查詢支持,即為每一種系統(tǒng)中存在的不同數(shù)據(jù)庫(kù)類型分別作 對(duì)應(yīng)的SQL處理。隨著系統(tǒng)的不斷增大,數(shù)據(jù)庫(kù)的類型也逐漸增多,SQL查詢的應(yīng)用場(chǎng)景也 越來越復(fù)雜,如果采用能支持不同數(shù)據(jù)庫(kù)的開發(fā)框架(例如Hibernate)對(duì)數(shù)據(jù)庫(kù)進(jìn)行查 詢,雖然能針對(duì)不同類型的數(shù)據(jù)庫(kù)進(jìn)行查詢,但是該開發(fā)框架需要大量的開發(fā)和維護(hù)成本, 并且當(dāng)系統(tǒng)中數(shù)據(jù)庫(kù)的數(shù)據(jù)量很大時(shí),就會(huì)降低系統(tǒng)的性能。

發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是,提供一種數(shù)據(jù)庫(kù)查詢方法,實(shí)現(xiàn)以較低的開發(fā)維 護(hù)成本開發(fā)出支持不同類型數(shù)據(jù)庫(kù)的SQL查詢的系統(tǒng),并且不會(huì)降低系統(tǒng)的性能。
本發(fā)明的另一個(gè)目的是將上述構(gòu)思應(yīng)用于具體的應(yīng)用環(huán)境中,提供一種數(shù)據(jù)匹配 裝置,從而保證該方法的實(shí)現(xiàn)和應(yīng)用。 為解決上述技術(shù)問題,本發(fā)明實(shí)施例提供了一種數(shù)據(jù)庫(kù)查詢方法,具體包括
接收對(duì)某一類型的目標(biāo)數(shù)據(jù)庫(kù)查詢的第一結(jié)構(gòu)化查詢語言SQL ;
根據(jù)預(yù)置的SQL處理類,將所述第一 SQL轉(zhuǎn)換為第二 SQL ;
應(yīng)用所述第二 SQL進(jìn)行所述目標(biāo)數(shù)據(jù)庫(kù)的查詢。 在所述接收某一類型的目標(biāo)數(shù)據(jù)庫(kù)查詢的第一結(jié)構(gòu)化查詢語言SQL之前,還包 括 在新建的SQL處理類中設(shè)置對(duì)當(dāng)前SQL的處理方式。
所述對(duì)當(dāng)前SQL的處理方式,具體為 接收第一參數(shù),所述第一參數(shù)為目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí)信息的連接;
返回第二參數(shù),所述第二參數(shù)為表示對(duì)當(dāng)前SQL處理結(jié)果的字符串。
所述根據(jù)預(yù)置的SQL處理類,將所述第一 SQL轉(zhuǎn)換為第二 SQL,具體包括
根據(jù)預(yù)置的SQL處理類,確定即將查詢的目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí)信息;
解析所述第一 SQL,得到該第一 SQL的最小語法元素;
根據(jù)所述目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí)信息,將所述第一 SQL的最小語法元素重新組合為第 二 SQL。 所述應(yīng)用所述第二SQL進(jìn)行目標(biāo)數(shù)據(jù)庫(kù)的查詢,具體包括 從所述第二 SQL獲取目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí)信息,以定位目標(biāo)數(shù)據(jù)庫(kù); 根據(jù)第二SQL對(duì)目標(biāo)數(shù)據(jù)庫(kù)進(jìn)行相應(yīng)的存取、修改、刪除或管理操作。 本發(fā)明實(shí)施例還提供了一種數(shù)據(jù)庫(kù)查詢裝置,具體包括 接收單元,用于接收對(duì)某一類型的目標(biāo)數(shù)據(jù)庫(kù)查詢的第一 SQL ; 轉(zhuǎn)換單元,用于根據(jù)預(yù)置的SQL處理類,將所述第一 SQL轉(zhuǎn)換為第二 SQL ; 查詢單元,用于應(yīng)用所述第二SQL進(jìn)行所述目標(biāo)數(shù)據(jù)庫(kù)的查詢。 所述裝置還包括 預(yù)置單元,用于在新建的SQL處理類中設(shè)置對(duì)當(dāng)前SQL的處理方式。
所述對(duì)當(dāng)前SQL的處理方式,具體為 接收第一參數(shù),所述第一參數(shù)為目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí)信息的連接;
返回第二參數(shù),所述第二參數(shù)為表示對(duì)當(dāng)前SQL處理結(jié)果的字符串。
所述轉(zhuǎn)換單元包括 第一確定單元,用于根據(jù)預(yù)置的SQL處理類,確定即將查詢的目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí) 信息; 解析單元,用于解析所述第一 SQL,得到該第一 SQL的最小語法元素; 組合單元,用于根據(jù)所述目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí)信息,將所述第一 SQL的最小語法元
素重新組合為第二 SQL。 所述查詢單元具體包括 第二解析單元,用于從所述第二 SQL獲取目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí)信息,以定位目標(biāo)數(shù) 據(jù)庫(kù); 執(zhí)行單元,用于根據(jù)第二SQL對(duì)目標(biāo)數(shù)據(jù)庫(kù)進(jìn)行相應(yīng)的讀取、修改、刪除或管理操 作。 從上述的技術(shù)方案可以看出,本發(fā)明將不能被要查詢的數(shù)據(jù)庫(kù)識(shí)別的第一SQL轉(zhuǎn) 換成所述數(shù)據(jù)庫(kù)能夠識(shí)別的第二 SQL,然后,應(yīng)用所述的第二 SQL對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢。應(yīng)用 本發(fā)明提供的數(shù)據(jù)庫(kù)查詢方法,使用很小的代碼開發(fā)量或修改量就能夠?qū)崿F(xiàn)某一 SQL到另 一 SQL的轉(zhuǎn)換,從而實(shí)現(xiàn)對(duì)不同數(shù)據(jù)庫(kù)類型的支持。本發(fā)明提供的數(shù)據(jù)庫(kù)查詢方法以較低 的開發(fā)維護(hù)成本,開發(fā)出同時(shí)適合多種數(shù)據(jù)庫(kù)類型應(yīng)用的系統(tǒng),實(shí)現(xiàn)對(duì)多種數(shù)據(jù)庫(kù)類型的 支持,而且,不會(huì)出現(xiàn)由于使用開發(fā)框架所帶來的系統(tǒng)性能的降低。


為了更清楚地說明本申請(qǐng)實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)
有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本
申請(qǐng)中記載的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,
還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明方法實(shí)施例一的流程圖; 圖2為本發(fā)明方法實(shí)施例二的流程 圖3為本發(fā)明裝置實(shí)施例一的結(jié)構(gòu)示意圖;
圖4為本發(fā)明裝置實(shí)施例二的結(jié)構(gòu)示意圖。
具體實(shí)施例方式
為實(shí)現(xiàn)本發(fā)明的發(fā)明目的,本發(fā)明提供一種數(shù)據(jù)庫(kù)查詢方法及裝置,該方法對(duì)查 詢某一類型數(shù)據(jù)庫(kù)的第一 SQL進(jìn)行轉(zhuǎn)換處理,得到第二 SQL,應(yīng)用第二 SQL進(jìn)行數(shù)據(jù)庫(kù)的查 詢。 以上是本發(fā)明的核心思想,為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下 面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯 然,所描述的實(shí)施例僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施 例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于 本發(fā)明保護(hù)的范圍。 參見圖l,示出了本發(fā)明的一種數(shù)據(jù)庫(kù)查詢方法實(shí)施例1的流程圖,可以包括以下 步驟 步驟101 :接收對(duì)某一類型的目標(biāo)數(shù)據(jù)庫(kù)查詢的第一 SQL。 上述的第一 SQL是進(jìn)行數(shù)據(jù)庫(kù)的查詢的標(biāo)準(zhǔn)語言,但是并非所有類型的數(shù)據(jù)庫(kù)都
能識(shí)別,當(dāng)要查詢的目標(biāo)數(shù)據(jù)庫(kù)不能識(shí)別所述第一 SQL時(shí),執(zhí)行以下步驟。 步驟102 :根據(jù)預(yù)置的SQL處理類,將所述第一 SQL轉(zhuǎn)換為第二 SQL。 該步驟中的轉(zhuǎn)換過程可以是解析所述第一 SQL,分解得到第一 SQL的最小語法元
素,然后根據(jù)目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí)信息將第一 SQL的全部最小語法元素重新組合成新的SQL
此處即第二 SQL。此處的目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí)信息是根據(jù)預(yù)置的SQL處理類獲取得到的,用來
唯一標(biāo)識(shí)出一個(gè)目標(biāo)數(shù)據(jù)庫(kù)。在實(shí)際應(yīng)用過程中,該步驟具體的實(shí)現(xiàn)方式可以是在傳遞第
一 SQL給目標(biāo)數(shù)據(jù)庫(kù)進(jìn)行目標(biāo)數(shù)據(jù)庫(kù)的查詢之前,插入對(duì)新建的SQL處理類中的SQL處理
方法的調(diào)用,該SQL處理方法即是第一 SQL到第二 SQL的具體實(shí)現(xiàn)方法。上述轉(zhuǎn)換得到的
第二 SQL是能夠被目標(biāo)數(shù)據(jù)庫(kù)識(shí)別的語句,即符合目標(biāo)數(shù)據(jù)庫(kù)的語法的語句。 步驟103 :應(yīng)用所述第二SQL進(jìn)行所述目標(biāo)數(shù)據(jù)庫(kù)的查詢。 該步驟中的第二 SQL是由第一 SQL根據(jù)目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí)信息轉(zhuǎn)換而得的,因此, 能夠被目標(biāo)數(shù)據(jù)庫(kù)所識(shí)別,該步驟的具體實(shí)現(xiàn)方式可以是將所述第二SQL傳遞給目標(biāo)數(shù) 據(jù)庫(kù),目標(biāo)數(shù)據(jù)庫(kù)再根據(jù)第二 SQL發(fā)出的命令進(jìn)行相應(yīng)的查詢操作。 在本實(shí)施例中,首先,通過將目標(biāo)數(shù)據(jù)庫(kù)不能識(shí)別的第一 SQL進(jìn)行轉(zhuǎn)換處理,得到 目標(biāo)數(shù)據(jù)庫(kù)能夠識(shí)別的第二SQL ;然后,應(yīng)用第二SQL進(jìn)行目標(biāo)數(shù)據(jù)庫(kù)的查詢。應(yīng)用該方法 進(jìn)行系統(tǒng)的開發(fā)只需對(duì)與數(shù)據(jù)庫(kù)相關(guān)的SQL語句進(jìn)行處理,可以不涉及開發(fā)的其它過程, 從而大大降低了系統(tǒng)的開發(fā)和維護(hù)成本。本實(shí)施例所提供的數(shù)據(jù)庫(kù)查詢方法,以較低的開 發(fā)維護(hù)成本,開發(fā)出同時(shí)適合多種數(shù)據(jù)庫(kù)類型應(yīng)用的系統(tǒng),實(shí)現(xiàn)對(duì)多種數(shù)據(jù)庫(kù)類型的查詢。 而且,不會(huì)出現(xiàn)由于使用開發(fā)框架所帶來的系統(tǒng)性能降低。 參見圖2,示出了本發(fā)明的一種數(shù)據(jù)庫(kù)查詢方法實(shí)施例2的流程圖,可以包括以下 步驟 步驟201 :在新建的SQL處理類中設(shè)置對(duì)當(dāng)前SQL的處理方式。
其中,所述對(duì)當(dāng)前SQL的處理方式具體可以為
子步驟Al :接收第一參數(shù),所述第一參數(shù)為目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí)信息的連接;
子步驟A2 :返回第二參數(shù),所述第二參數(shù)為表示對(duì)當(dāng)前SQL處理結(jié)果的字符串。
該兩個(gè)子步驟可以通過以下方法實(shí)現(xiàn)首先,新建一個(gè)SQL處理類,可以將該處理 類命名為SQLM即Proxy,此處新建SQL處理類的方法和現(xiàn)有技術(shù)中類似,并且該處理類的 名稱可以任意設(shè)置,這里只是一個(gè)具體的例子,該處理類的名稱并不影響本發(fā)明的實(shí)現(xiàn);然 后,在所述的SQL處理類中定義一個(gè)對(duì)當(dāng)前SQL的處理方法,本例中的對(duì)當(dāng)前SQL的處理方 法即上述的對(duì)當(dāng)前SQL的處理方式。該處理方法可以命名為m即SQL。 在實(shí)際過程中,定義所述處理方法的具體過程即是配置兩個(gè)參數(shù),第一個(gè)參數(shù)需 要從外部進(jìn)行接收,該參數(shù)可以為Connection類型,表示目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí)信息的連接, 可以通過該參數(shù)獲取目標(biāo)數(shù)據(jù)庫(kù)的類型和版本等標(biāo)識(shí)信息,用于唯一標(biāo)識(shí)出一個(gè)目標(biāo)數(shù)據(jù) 庫(kù),為后面的處理過程提供必要的信息;第二個(gè)參數(shù)為執(zhí)行完該m即SQL方法之后需要返回 的參數(shù),即是所述處理方法的返回值,可以為String類型,表示處理方法將當(dāng)前SQL轉(zhuǎn)換后 的SQL,即目標(biāo)數(shù)據(jù)庫(kù)最終接收到的SQL,在本例子中,即是第二 SQL。需要說明的是,上述的 內(nèi)容只是一個(gè)具體的實(shí)施例,并不能造成對(duì)該步驟的限制。
步驟202 :接收對(duì)某一類型的目標(biāo)數(shù)據(jù)庫(kù)查詢的第一 SQL。 上述的第一 SQL是進(jìn)行數(shù)據(jù)庫(kù)的查詢的標(biāo)準(zhǔn)語言,但是并非所有類型的數(shù)據(jù)庫(kù)均 能識(shí)別所述第一 SQL,當(dāng)要查詢的目標(biāo)數(shù)據(jù)庫(kù)不能識(shí)別所述第一 SQL時(shí)執(zhí)行以下步驟。
步驟203 :根據(jù)預(yù)置的SQL處理類,確定目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí)信息。
該步驟可以通過步驟201中的名為m即SQL的處理方法中的第一參數(shù)來確定目標(biāo) 數(shù)據(jù)庫(kù)的類型和版本等標(biāo)識(shí)信息。當(dāng)然,還可以根據(jù)系統(tǒng)的使用環(huán)境不同而使用其它方法 獲得目標(biāo)數(shù)據(jù)庫(kù)標(biāo)識(shí)信息,例如,可以在使用hibernate時(shí),利用Environment類的判斷來 獲取目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí)信息。 該步驟的保護(hù)范圍并不局限于上述獲得目標(biāo)數(shù)據(jù)庫(kù)標(biāo)識(shí)信息的兩種方法,能夠獲
得目標(biāo)數(shù)據(jù)庫(kù)標(biāo)識(shí)信息的所有方法均在該方法的保護(hù)范圍之內(nèi)。 步驟204 :解析所述第一 SQL,得到該第一 SQL的最小語法元素。 該步驟可以使用Yacc(Yet Another Compiler-Compiler,編譯器代碼生成器)工
具,解析所述的第一 SQL,從而得到該第一 SQL的最小語法元素,并且可以將所述第一 SQL的
最小語法元素以一種類似樹狀的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)。由于Yacc工具是本領(lǐng)域的公知常識(shí)故在
此不再詳細(xì)介紹。當(dāng)然,該步驟的實(shí)現(xiàn)還可以使用其它的解析工具,甚至,開發(fā)人員還可以
自行開發(fā)相關(guān)的解析代碼。 該步驟的保護(hù)范圍并不局限于上述解析第一 SQL的方法,所有能夠解析第一 SQL 的方法均在該方法的保護(hù)范圍之內(nèi)。 步驟205 :根據(jù)所述目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí)信息,將所述第一 SQL的最小語法元素重新 組合成第二 SQL。 在具體實(shí)現(xiàn)過程中,本步驟可以由影射管理器來執(zhí)行。影射管理器可以根據(jù)之前 獲得的目標(biāo)數(shù)據(jù)庫(kù)標(biāo)識(shí)信息,選擇目標(biāo)數(shù)據(jù)庫(kù)對(duì)應(yīng)的影射處理類。當(dāng)目標(biāo)數(shù)據(jù)庫(kù)的類型和 版本均已知時(shí),選擇預(yù)定義的該數(shù)據(jù)庫(kù)對(duì)應(yīng)的影射處理類;當(dāng)目標(biāo)數(shù)據(jù)庫(kù)的類型已知版本 未知時(shí),選擇目標(biāo)數(shù)據(jù)庫(kù)類型對(duì)應(yīng)的最大版本影射處理類;當(dāng)數(shù)據(jù)庫(kù)的類型和版本均未知 時(shí),選擇預(yù)定義的數(shù)據(jù)庫(kù)類型對(duì)應(yīng)的影射處理類。根據(jù)上述原則選擇出目標(biāo)數(shù)據(jù)庫(kù)對(duì)應(yīng)的
6影射處理類后,由該影射處理類遍歷解析得到的全部的第一 SQL的最小語法元素,重新組 合成第二 SQL,該第二 SQL能夠被目標(biāo)數(shù)據(jù)庫(kù)所識(shí)別,也是最終發(fā)送至目標(biāo)數(shù)據(jù)庫(kù)的SQL。
其中,所述的影射管理器可以是一個(gè)基于XML (Extensible Mark-upLanguage,可 擴(kuò)展標(biāo)記語言)配置的可擴(kuò)展結(jié)構(gòu),該影射管理器可以通過定義系統(tǒng)支持的各種數(shù)據(jù)庫(kù)的 類型及各類型數(shù)據(jù)庫(kù)支持的不同版本,以及可以為每種類型的每個(gè)版本數(shù)據(jù)庫(kù)的語法元素 定義新的語法,從而得到當(dāng)前SQL語法到目標(biāo)數(shù)據(jù)庫(kù)SQL語法的影射關(guān)系。影射管理器通 過迭代子遍歷當(dāng)前SQL的全部語法元素,根據(jù)所述當(dāng)前SQL語法到目標(biāo)數(shù)據(jù)庫(kù)SQL語法的 影射關(guān)系,重新組合成新的SQL,本例中即第二 SQL。本例中的當(dāng)前SQL即第一 SQL。
步驟206 :從所述第二 SQL獲取目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí)信息,以定位目標(biāo)數(shù)據(jù)庫(kù)。
解析上一步得到的目標(biāo)數(shù)據(jù)庫(kù)能夠識(shí)別的第二 SQL,從而獲得目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí) 信息,根據(jù)該標(biāo)識(shí)信息定位要查詢的目標(biāo)數(shù)據(jù)庫(kù),并將所述第二 SQL發(fā)送至目標(biāo)數(shù)據(jù)庫(kù)。
步驟207 :根據(jù)第二SQL對(duì)目標(biāo)數(shù)據(jù)庫(kù)進(jìn)行相應(yīng)的存取、修改、刪除或管理操作。
根據(jù)目標(biāo)數(shù)據(jù)庫(kù)接收到的所述第二 SQL,對(duì)目標(biāo)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行相應(yīng)存取、修 改或刪除,或?qū)?shù)據(jù)庫(kù)系統(tǒng)進(jìn)行管理。 通過以上的方法實(shí)施例的描述,所屬領(lǐng)域的技術(shù)人員可以清楚地了解到本發(fā)明可 借助軟件加必需的通用硬件平臺(tái)的方式來實(shí)現(xiàn),當(dāng)然也可以通過硬件,但很多情況下前者 是更佳的實(shí)施方式。基于這樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對(duì)現(xiàn)有技術(shù)做出貢 獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包 括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí) 行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括只讀存儲(chǔ)器 (ROM)、隨機(jī)存取存儲(chǔ)器(RAM)、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。
相應(yīng)于上面的方法實(shí)施例,本發(fā)明實(shí)施例還提供一種數(shù)據(jù)庫(kù)查詢裝置。參見圖3, 示出了一種數(shù)據(jù)庫(kù)查詢裝置實(shí)施例1的結(jié)構(gòu)示意圖,可以包括 接收單元301,用于接收用戶發(fā)送的對(duì)某一類型的目標(biāo)數(shù)據(jù)庫(kù)查詢的第一SQL。
上述的第一 SQL是進(jìn)行數(shù)據(jù)庫(kù)的查詢的標(biāo)準(zhǔn)語言,但是并非所有類型的數(shù)據(jù)庫(kù)都 能識(shí)別,當(dāng)要查詢的目標(biāo)數(shù)據(jù)庫(kù)不能識(shí)別所述第一 SQL時(shí),以下的功能模塊共同完成對(duì)目 標(biāo)數(shù)據(jù)庫(kù)的查詢。 轉(zhuǎn)換單元302,用于根據(jù)預(yù)置的SQL處理類,將所述第一 SQL轉(zhuǎn)換為第二 SQL。
該功能模塊的具體工作過程可以是解析所述第一 SQL,分解得到第一 SQL的最小 語法元素,然后根據(jù)目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí)信息將第一 SQL的全部最小語法元素重新組合成新 的SQL此處即第二 SQL。此處的目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí)信息是根據(jù)預(yù)置的SQL處理類獲取得到 的,用來用于唯一標(biāo)識(shí)出一個(gè)目標(biāo)數(shù)據(jù)庫(kù)。在實(shí)際應(yīng)用過程中,該功能模塊的具體實(shí)現(xiàn)方式 可以是在傳遞第一 SQL給目標(biāo)數(shù)據(jù)庫(kù)進(jìn)行目標(biāo)數(shù)據(jù)庫(kù)的查詢之前,插入對(duì)新建的SQL處 理類中的SQL處理方法的調(diào)用,該SQL處理方法即是第一 SQL到第二 SQL的具體實(shí)現(xiàn)方法。 上述轉(zhuǎn)換得到的第二 SQL是能夠被目標(biāo)數(shù)據(jù)庫(kù)識(shí)別的語句,即符合目標(biāo)數(shù)據(jù)庫(kù)的語法的語 句。 查詢單元303,用于應(yīng)用所述第二 SQL進(jìn)行所述目標(biāo)數(shù)據(jù)庫(kù)的查詢。 該功能模塊接收的第二 SQL是由第一 SQL根據(jù)目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí)信息轉(zhuǎn)換而得
的,因此,能夠被目標(biāo)數(shù)據(jù)庫(kù)所識(shí)別,該功能模塊的具體實(shí)現(xiàn)方式可以是將所述第二 SQL傳遞給目標(biāo)數(shù)據(jù)庫(kù),目標(biāo)數(shù)據(jù)庫(kù)再根據(jù)第二SQL發(fā)出的命令進(jìn)行相應(yīng)的查詢操作。 在本實(shí)施例中,首先,通過轉(zhuǎn)換單元302將目標(biāo)數(shù)據(jù)庫(kù)不能識(shí)別的第一 SQL進(jìn)行轉(zhuǎn)
換處理,得到目標(biāo)數(shù)據(jù)庫(kù)能夠識(shí)別的第二 SQL ;然后,查詢單元303應(yīng)用第二 SQL進(jìn)行目標(biāo)
數(shù)據(jù)庫(kù)的查詢。應(yīng)用該裝置進(jìn)行系統(tǒng)的開發(fā)只需對(duì)與數(shù)據(jù)庫(kù)相關(guān)的SQL語句進(jìn)行處理,可
以不涉及開發(fā)的其它過程,從而大大降低了系統(tǒng)的開發(fā)和維護(hù)成本。本實(shí)施例所提供的數(shù)
據(jù)庫(kù)查詢裝置,以較低的開發(fā)維護(hù)成本,開發(fā)出同時(shí)適合多種數(shù)據(jù)庫(kù)類型應(yīng)用的系統(tǒng),實(shí)現(xiàn)
對(duì)多種數(shù)據(jù)庫(kù)類型的查詢,而且,不會(huì)出現(xiàn)由于使用開發(fā)框架所帶來的系統(tǒng)性能降低。 參見圖4,示出了一種數(shù)據(jù)庫(kù)查詢裝置實(shí)施例2的結(jié)構(gòu)示意圖,可以包括 預(yù)置單元401,用于在新建的SQL處理類中設(shè)置對(duì)當(dāng)前SQL的處理方式。 其中,所述對(duì)當(dāng)前SQL的處理方式具體可以為 接收第一參數(shù),所述第一參數(shù)為目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí)信息的連接; 返回第二參數(shù),所述第二參數(shù)為表示對(duì)當(dāng)前SQL處理結(jié)果的字符串。 該功能模塊可以通過以下過程實(shí)現(xiàn)上述對(duì)當(dāng)前SQL的處理方式的設(shè)置 首先,新建一個(gè)SQL處理類,可以將該處理類命名為SQLM即Proxy ,此處新建SQL處
理類的方法和現(xiàn)有技術(shù)中類似,并且該處理類的名稱可以任意設(shè)置,這里只是一個(gè)具體的
例子,該處理類的名稱并不影響本發(fā)明的實(shí)現(xiàn);然后,在所述的SQL處理類中定義一個(gè)對(duì)當(dāng)
前SQL的處理方法,本例中的對(duì)當(dāng)前SQL的處理方法即上述的對(duì)當(dāng)前SQL的處理方式。該
處理方法可以命名為m即SQL。 在實(shí)際過程中,定義所述處理方法的具體過程即是配置兩個(gè)參數(shù),第一個(gè)參數(shù)需 要從外部進(jìn)行接收,該參數(shù)可以為Connection類型,表示目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí)信息的連接, 可以通過該參數(shù)獲取目標(biāo)數(shù)據(jù)庫(kù)的類型和版本等標(biāo)識(shí)信息,用于唯一標(biāo)識(shí)出一個(gè)目標(biāo)數(shù)據(jù) 庫(kù),為后面的處理過程提供必要的信息;第二個(gè)參數(shù)為執(zhí)行完該m即SQL方法之后需要返回 的參數(shù),即是所述處理方法的返回值,可以為String類型,表示處理方法將當(dāng)前SQL轉(zhuǎn)換后 的SQL,即目標(biāo)數(shù)據(jù)庫(kù)最終接收到的SQL,在本例子中,即是第二SQL。需要說明的是,上述的 內(nèi)容只是一個(gè)具體的實(shí)施例,并不能造成對(duì)該功能模塊的限制。 接收單元402,用于接收用戶發(fā)送的對(duì)某一類型的目標(biāo)數(shù)據(jù)庫(kù)查詢的第一SQL。
上述的第一 SQL是進(jìn)行數(shù)據(jù)庫(kù)的查詢的標(biāo)準(zhǔn)語言,但是并非所有類型的數(shù)據(jù)庫(kù)均 能識(shí)別所述第一 SQL,當(dāng)要查詢的目標(biāo)數(shù)據(jù)庫(kù)不能識(shí)別所述第一 SQL時(shí),有以下功能模塊共 同完成對(duì)目標(biāo)數(shù)據(jù)庫(kù)的查詢。 第一確定單元403,用于根據(jù)預(yù)置的SQL處理類,確定即將查詢的目標(biāo)數(shù)據(jù)庫(kù)的標(biāo) 識(shí)信息。 該功能模塊可以通過預(yù)置單元401定義的名為m即SQL的處理方法中的第一參數(shù), 確定目標(biāo)數(shù)據(jù)庫(kù)的類型和版本等標(biāo)識(shí)信息。當(dāng)然,還可以根據(jù)系統(tǒng)的使用環(huán)境不同而使用 其它方法獲得目標(biāo)數(shù)據(jù)庫(kù)標(biāo)識(shí)信息,例如,可以在使用hibernate時(shí),利用Environment類 的判斷來獲取目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí)信息。能夠獲得目標(biāo)數(shù)據(jù)庫(kù)標(biāo)識(shí)信息的所有功能模塊均在 該裝置的保護(hù)范圍之內(nèi)。 解析單元404,用于解析所述第一 SQL,得到該第一 SQL的最小語法元素。 該功能模塊可以使用Yacc(Yet Another Compiler-Compiler,編譯器代碼生成
器)工具,解析所述的第一 SQL,從而得到該第一 SQL的最小語法元素,并且可以將所述第
8一 SQL的最小語法元素以一種類似樹狀的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)。由于Yacc工具是本領(lǐng)域的公知 常識(shí)故在此不再詳細(xì)介紹。當(dāng)然,該功能模塊的實(shí)現(xiàn)還可以使用其它的解析工具,甚至,開 發(fā)人員還可以自行開發(fā)相關(guān)的解析代碼。 該功能模塊的保護(hù)范圍并不局限于上述解析第一 SQL的方式,所有能夠?qū)崿F(xiàn)解析 第一SQL模塊均在該裝置的保護(hù)范圍之內(nèi)。 組合單元405,用于根據(jù)所述目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí)信息,將所述第一 SQL的最小語法 元素重新組合為第二 SQL。 在具體實(shí)現(xiàn)過程中,該功能模塊可以是影射管理器。影射管理器可以根據(jù)接收到
的之前獲得的目標(biāo)數(shù)據(jù)庫(kù)標(biāo)識(shí)信息,選擇目標(biāo)數(shù)據(jù)庫(kù)對(duì)應(yīng)的影射處理類。當(dāng)目標(biāo)數(shù)據(jù)庫(kù)的 類型和版本均已知時(shí),選擇預(yù)定義的該數(shù)據(jù)庫(kù)對(duì)應(yīng)的影射處理類;當(dāng)目標(biāo)數(shù)據(jù)庫(kù)的類型已
知版本未知時(shí),選擇目標(biāo)數(shù)據(jù)庫(kù)類型對(duì)應(yīng)的最大版本影射處理類;當(dāng)數(shù)據(jù)庫(kù)的類型和版本 均未知時(shí),選擇預(yù)定義的數(shù)據(jù)庫(kù)類型對(duì)應(yīng)的影射處理類。根據(jù)上述原則選擇出目標(biāo)數(shù)據(jù)庫(kù) 對(duì)應(yīng)的影射處理類后,由該影射處理類遍歷解析得到的全部的第一 SQL的最小語法元素, 重新組合成第二 SQL,該第二 SQL能夠被目標(biāo)數(shù)據(jù)庫(kù)所識(shí)別,也是最終發(fā)送至目標(biāo)數(shù)據(jù)庫(kù)的 SQL。 其中,所述的影射管理器可以是一個(gè)基于XML (Extensible Mark-upLanguage,可 擴(kuò)展標(biāo)記語言)配置的可擴(kuò)展結(jié)構(gòu),該影射管理器可以通過定義系統(tǒng)支持的各種數(shù)據(jù)庫(kù)的 類型及各類型數(shù)據(jù)庫(kù)支持的不同版本,以及可以為每種類型的每個(gè)版本數(shù)據(jù)庫(kù)的語法元素 定義新的語法,從而得到當(dāng)前SQL語法到目標(biāo)數(shù)據(jù)庫(kù)SQL語法的影射關(guān)系。然后,影射管理 器通過迭代子遍歷當(dāng)前SQL的全部語法元素,根據(jù)所述當(dāng)前SQL語法到目標(biāo)數(shù)據(jù)庫(kù)SQL語 法的影射關(guān)系,重新組合成新的SQL,本例中即第二 SQL。本例中的當(dāng)前SQL即第一 SQL。
第二確定單元406,用于從所述第二 SQL獲取目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí)信息,以定位目標(biāo) 數(shù)據(jù)庫(kù)。 該功能模塊可以通過解析接收到的目標(biāo)數(shù)據(jù)庫(kù)能夠識(shí)別的第二SQL,從而獲得目 標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí)信息,根據(jù)該標(biāo)識(shí)信息定位要查詢的目標(biāo)數(shù)據(jù)庫(kù),并將所述第二 SQL發(fā)送 至目標(biāo)數(shù)據(jù)庫(kù)。 執(zhí)行單元407,用于根據(jù)第二SQL對(duì)目標(biāo)數(shù)據(jù)庫(kù)進(jìn)行相應(yīng)的讀取、修改、刪除或管 理操作。 該功能模塊可以根據(jù)接收到的所述第二SQL,對(duì)目標(biāo)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行相應(yīng)存 取、修改或刪除,或?qū)?shù)據(jù)庫(kù)系統(tǒng)進(jìn)行管理。 可以理解的是,本發(fā)明可用于眾多通用或?qū)S玫挠?jì)算系統(tǒng)環(huán)境或配置中。例如個(gè)
人計(jì)算機(jī)、服務(wù)器計(jì)算機(jī)、手持設(shè)備或便攜式設(shè)備、平板型設(shè)備、多處理器系統(tǒng)、基于微處理 器的系統(tǒng)、置頂盒、可編程的消費(fèi)電子設(shè)備、網(wǎng)絡(luò)PC、小型計(jì)算機(jī)、大型計(jì)算機(jī)、包括以上任
何系統(tǒng)或設(shè)備的分布式計(jì)算環(huán)境等等。 本發(fā)明可以在由計(jì)算機(jī)執(zhí)行的計(jì)算機(jī)可執(zhí)行指令的一般上下文中描述,例如程序 模塊。 一般地,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對(duì)象、組 件、數(shù)據(jù)結(jié)構(gòu)等等。也可以在分布式計(jì)算環(huán)境中實(shí)踐本發(fā)明,在這些分布式計(jì)算環(huán)境中,由 通過通信網(wǎng)絡(luò)而被連接的遠(yuǎn)程處理設(shè)備來執(zhí)行任務(wù)。在分布式計(jì)算環(huán)境中,程序模塊可以 位于包括存儲(chǔ)設(shè)備在內(nèi)的本地和遠(yuǎn)程計(jì)算機(jī)存儲(chǔ)介質(zhì)中。
需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個(gè)實(shí) 體或者操作與另一個(gè)實(shí)體或操作區(qū)分開來,而不一定要求或者暗示這些實(shí)體或操作之間存 在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語"包括"、"包含"或者其任何其他變體意在涵 蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要 素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備
所固有的要素。在沒有更多限制的情況下,由語句"包括一個(gè)......"限定的要素,并不排
除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。 對(duì)于裝置實(shí)施例而言,由于其基本對(duì)應(yīng)于方法實(shí)施例,所以相關(guān)之處參見方法實(shí)
施例的部分說明即可。以上所描述的裝置實(shí)施例僅僅是示意性的,其中所述作為分離部件
說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以
不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的
需要選擇其中的部分或者全部模塊來實(shí)現(xiàn)本實(shí)施例方案的目的。本領(lǐng)域普通技術(shù)人員在不
付出創(chuàng)造性勞動(dòng)的情況下,即可以理解并實(shí)施。 以上所述僅是本發(fā)明的具體實(shí)施方式
,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人 員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng) 視為本發(fā)明的保護(hù)范圍。
10
權(quán)利要求
一種數(shù)據(jù)庫(kù)查詢方法,其特征在于,具體包括接收對(duì)某一類型的目標(biāo)數(shù)據(jù)庫(kù)查詢的第一結(jié)構(gòu)化查詢語言SQL;根據(jù)預(yù)置的SQL處理類,將所述第一SQL轉(zhuǎn)換為第二SQL;應(yīng)用所述第二SQL進(jìn)行所述目標(biāo)數(shù)據(jù)庫(kù)的查詢。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述接收某一類型的目標(biāo)數(shù)據(jù)庫(kù)查詢的 第一結(jié)構(gòu)化查詢語言SQL之前,還包括在新建的SQL處理類中設(shè)置對(duì)當(dāng)前SQL的處理方式。
3. 根據(jù)權(quán)利要求2所述的方法,其特征在于,所述對(duì)當(dāng)前SQL的處理方式,具體為 接收第一參數(shù),所述第一參數(shù)為目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí)信息的連接; 返回第二參數(shù),所述第二參數(shù)為表示對(duì)當(dāng)前SQL處理結(jié)果的字符串。
4. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)預(yù)置的SQL處理類,將所述第一 SQL轉(zhuǎn)換為第二 SQL,具體包括根據(jù)預(yù)置的SQL處理類,確定即將查詢的目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí)信息; 解析所述第一 SQL,得到該第一 SQL的最小語法元素;根據(jù)所述目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí)信息,將所述第一 SQL的最小語法元素重新組合為第二SQL。
5. 根據(jù)權(quán)利要求4所述的方法,其特征在于,所述應(yīng)用所述第二SQL進(jìn)行目標(biāo)數(shù)據(jù)庫(kù)的 查詢,具體包括從所述第二 SQL獲取目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí)信息,以定位目標(biāo)數(shù)據(jù)庫(kù); 根據(jù)第二SQL對(duì)目標(biāo)數(shù)據(jù)庫(kù)進(jìn)行相應(yīng)的存取、修改、刪除或管理操作。
6. —種數(shù)據(jù)庫(kù)查詢裝置,其特征在于,具體包括 接收單元,用于接收對(duì)某一類型的目標(biāo)數(shù)據(jù)庫(kù)查詢的第一 SQL ; 轉(zhuǎn)換單元,用于根據(jù)預(yù)置的SQL處理類,將所述第一 SQL轉(zhuǎn)換為第二 SQL ; 查詢單元,用于應(yīng)用所述第二SQL進(jìn)行所述目標(biāo)數(shù)據(jù)庫(kù)的查詢。
7. 根據(jù)權(quán)要求6所述的裝置,其特征在于,還包括 預(yù)置單元,用于在新建的SQL處理類中設(shè)置對(duì)當(dāng)前SQL的處理方式。
8. 根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述對(duì)當(dāng)前SQL的處理方式,具體為接 收第一參數(shù),所述第一參數(shù)為目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí)信息的連接;返回第二參數(shù),所述第二參數(shù)為表示對(duì)當(dāng)前SQL處理結(jié)果的字符串。
9. 根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述轉(zhuǎn)換單元包括 第一確定單元,用于根據(jù)預(yù)置的SQL處理類,確定即將查詢的目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí)信息; 解析單元,用于解析所述第一 SQL,得到該第一 SQL的最小語法元素; 組合單元,用于根據(jù)所述目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí)信息,將所述第一 SQL的最小語法元素重新組合為第二 SQL。
10. 根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述查詢單元具體包括 第二確定單元,用于從所述第二 SQL獲取目標(biāo)數(shù)據(jù)庫(kù)的標(biāo)識(shí)信息,以定位目標(biāo)數(shù)據(jù)庫(kù); 執(zhí)行單元,用于根據(jù)第二SQL對(duì)目標(biāo)數(shù)據(jù)庫(kù)進(jìn)行相應(yīng)的讀取、修改、刪除或管理操作。
全文摘要
本發(fā)明實(shí)施例公開了一種數(shù)據(jù)庫(kù)查詢方法及裝置,所述數(shù)據(jù)庫(kù)查詢方法,具體包括接收對(duì)某一類型的目標(biāo)數(shù)據(jù)庫(kù)查詢的第一結(jié)構(gòu)化查詢語言SQL;根據(jù)預(yù)置的SQL處理類,將所述第一SQL轉(zhuǎn)換為第二SQL;應(yīng)用所述第二SQL進(jìn)行所述目標(biāo)數(shù)據(jù)庫(kù)的查詢。應(yīng)用本發(fā)明提供的數(shù)據(jù)庫(kù)查詢方法,使用很小的代碼開發(fā)量或修改量就能夠?qū)崿F(xiàn)某一SQL到另一SQL的轉(zhuǎn)換,從而實(shí)現(xiàn)對(duì)不同數(shù)據(jù)庫(kù)類型的支持。本發(fā)明提供的數(shù)據(jù)庫(kù)查詢方法以較低的開發(fā)維護(hù)成本,開發(fā)出同時(shí)適合多種數(shù)據(jù)庫(kù)類型應(yīng)用的系統(tǒng),實(shí)現(xiàn)對(duì)多種數(shù)據(jù)庫(kù)類型的支持,而且,不會(huì)出現(xiàn)由于使用開發(fā)框架所帶來的系統(tǒng)性能的降低。
文檔編號(hào)G06F17/30GK101706810SQ20091023825
公開日2010年5月12日 申請(qǐng)日期2009年11月23日 優(yōu)先權(quán)日2009年11月23日
發(fā)明者李永利, 袁大勇, 賈林, 錢世啟 申請(qǐng)人:北京中創(chuàng)信測(cè)科技股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
峨眉山市| 驻马店市| 贵德县| 海原县| 花莲市| 澄城县| 辰溪县| 浮梁县| 噶尔县| 肥乡县| 连云港市| 牟定县| 东平县| 田林县| 思南县| 博罗县| 新安县| 常宁市| 洮南市| 同心县| 界首市| 巴青县| 金华市| 舞阳县| 陇川县| 青州市| 靖西县| 静海县| 舞钢市| 滕州市| 化州市| 长葛市| 西城区| 遵化市| 镇平县| 威信县| 临澧县| 兴和县| 诸城市| 阿坝| 社会|