專利名稱:一種數(shù)據(jù)庫查詢方法及裝置的制作方法
技術領域:
本發(fā)明涉及數(shù)據(jù)庫技術領域,特別是涉及一種數(shù)據(jù)庫查詢方法及裝置。
背景技術:
SQL (Structured Query Language,結構化查詢語言)是專為數(shù)據(jù)庫而建立的操作 命令集,是一種數(shù)據(jù)庫語言。SQL的主要功能就是同各種數(shù)據(jù)庫建立聯(lián)系,使不同類型的數(shù) 據(jù)庫之間進行溝通。按照ANSI(美國國家標準協(xié)會)的規(guī)定,SQL被作為關系型數(shù)據(jù)庫管 理系統(tǒng)的標準語言。在使用SQL時,只需要發(fā)出"做什么"的命令,而不需要考慮"怎么做"。 SQL語句可以用來執(zhí)行對數(shù)據(jù)庫的各種各樣的操作,例如更新數(shù)據(jù)庫中的數(shù)據(jù),從數(shù)據(jù)庫中 提取數(shù)據(jù)等。目前,絕大多數(shù)流行的關系型數(shù)據(jù)庫管理系統(tǒng),如Oracle, Sybase,Microsoft SQL Server, Access等都采用了 SQL語言標準。 現(xiàn)有技術中,對系統(tǒng)中的不同類型數(shù)據(jù)庫進行查詢時,采用了條件判斷的方式來 解決對不同類型數(shù)據(jù)庫的SQL查詢支持,即為每一種系統(tǒng)中存在的不同數(shù)據(jù)庫類型分別作 對應的SQL處理。隨著系統(tǒng)的不斷增大,數(shù)據(jù)庫的類型也逐漸增多,SQL查詢的應用場景也 越來越復雜,如果采用能支持不同數(shù)據(jù)庫的開發(fā)框架(例如Hibernate)對數(shù)據(jù)庫進行查 詢,雖然能針對不同類型的數(shù)據(jù)庫進行查詢,但是該開發(fā)框架需要大量的開發(fā)和維護成本, 并且當系統(tǒng)中數(shù)據(jù)庫的數(shù)據(jù)量很大時,就會降低系統(tǒng)的性能。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術問題是,提供一種數(shù)據(jù)庫查詢方法,實現(xiàn)以較低的開發(fā)維 護成本開發(fā)出支持不同類型數(shù)據(jù)庫的SQL查詢的系統(tǒng),并且不會降低系統(tǒng)的性能。
本發(fā)明的另一個目的是將上述構思應用于具體的應用環(huán)境中,提供一種數(shù)據(jù)匹配 裝置,從而保證該方法的實現(xiàn)和應用。 為解決上述技術問題,本發(fā)明實施例提供了一種數(shù)據(jù)庫查詢方法,具體包括
接收對某一類型的目標數(shù)據(jù)庫查詢的第一結構化查詢語言SQL ;
根據(jù)預置的SQL處理類,將所述第一 SQL轉換為第二 SQL ;
應用所述第二 SQL進行所述目標數(shù)據(jù)庫的查詢。 在所述接收某一類型的目標數(shù)據(jù)庫查詢的第一結構化查詢語言SQL之前,還包 括 在新建的SQL處理類中設置對當前SQL的處理方式。
所述對當前SQL的處理方式,具體為 接收第一參數(shù),所述第一參數(shù)為目標數(shù)據(jù)庫的標識信息的連接;
返回第二參數(shù),所述第二參數(shù)為表示對當前SQL處理結果的字符串。
所述根據(jù)預置的SQL處理類,將所述第一 SQL轉換為第二 SQL,具體包括
根據(jù)預置的SQL處理類,確定即將查詢的目標數(shù)據(jù)庫的標識信息;
解析所述第一 SQL,得到該第一 SQL的最小語法元素;
根據(jù)所述目標數(shù)據(jù)庫的標識信息,將所述第一 SQL的最小語法元素重新組合為第 二 SQL。 所述應用所述第二SQL進行目標數(shù)據(jù)庫的查詢,具體包括 從所述第二 SQL獲取目標數(shù)據(jù)庫的標識信息,以定位目標數(shù)據(jù)庫; 根據(jù)第二SQL對目標數(shù)據(jù)庫進行相應的存取、修改、刪除或管理操作。 本發(fā)明實施例還提供了一種數(shù)據(jù)庫查詢裝置,具體包括 接收單元,用于接收對某一類型的目標數(shù)據(jù)庫查詢的第一 SQL ; 轉換單元,用于根據(jù)預置的SQL處理類,將所述第一 SQL轉換為第二 SQL ; 查詢單元,用于應用所述第二SQL進行所述目標數(shù)據(jù)庫的查詢。 所述裝置還包括 預置單元,用于在新建的SQL處理類中設置對當前SQL的處理方式。
所述對當前SQL的處理方式,具體為 接收第一參數(shù),所述第一參數(shù)為目標數(shù)據(jù)庫的標識信息的連接;
返回第二參數(shù),所述第二參數(shù)為表示對當前SQL處理結果的字符串。
所述轉換單元包括 第一確定單元,用于根據(jù)預置的SQL處理類,確定即將查詢的目標數(shù)據(jù)庫的標識 信息; 解析單元,用于解析所述第一 SQL,得到該第一 SQL的最小語法元素; 組合單元,用于根據(jù)所述目標數(shù)據(jù)庫的標識信息,將所述第一 SQL的最小語法元
素重新組合為第二 SQL。 所述查詢單元具體包括 第二解析單元,用于從所述第二 SQL獲取目標數(shù)據(jù)庫的標識信息,以定位目標數(shù) 據(jù)庫; 執(zhí)行單元,用于根據(jù)第二SQL對目標數(shù)據(jù)庫進行相應的讀取、修改、刪除或管理操 作。 從上述的技術方案可以看出,本發(fā)明將不能被要查詢的數(shù)據(jù)庫識別的第一SQL轉 換成所述數(shù)據(jù)庫能夠識別的第二 SQL,然后,應用所述的第二 SQL對數(shù)據(jù)庫進行查詢。應用 本發(fā)明提供的數(shù)據(jù)庫查詢方法,使用很小的代碼開發(fā)量或修改量就能夠實現(xiàn)某一 SQL到另 一 SQL的轉換,從而實現(xiàn)對不同數(shù)據(jù)庫類型的支持。本發(fā)明提供的數(shù)據(jù)庫查詢方法以較低 的開發(fā)維護成本,開發(fā)出同時適合多種數(shù)據(jù)庫類型應用的系統(tǒng),實現(xiàn)對多種數(shù)據(jù)庫類型的 支持,而且,不會出現(xiàn)由于使用開發(fā)框架所帶來的系統(tǒng)性能的降低。
為了更清楚地說明本申請實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)
有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本
申請中記載的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,
還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明方法實施例一的流程圖; 圖2為本發(fā)明方法實施例二的流程 圖3為本發(fā)明裝置實施例一的結構示意圖;
圖4為本發(fā)明裝置實施例二的結構示意圖。
具體實施例方式
為實現(xiàn)本發(fā)明的發(fā)明目的,本發(fā)明提供一種數(shù)據(jù)庫查詢方法及裝置,該方法對查 詢某一類型數(shù)據(jù)庫的第一 SQL進行轉換處理,得到第二 SQL,應用第二 SQL進行數(shù)據(jù)庫的查 詢。 以上是本發(fā)明的核心思想,為了使本技術領域的人員更好地理解本發(fā)明方案,下 面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯 然,所描述的實施例僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施 例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于 本發(fā)明保護的范圍。 參見圖l,示出了本發(fā)明的一種數(shù)據(jù)庫查詢方法實施例1的流程圖,可以包括以下 步驟 步驟101 :接收對某一類型的目標數(shù)據(jù)庫查詢的第一 SQL。 上述的第一 SQL是進行數(shù)據(jù)庫的查詢的標準語言,但是并非所有類型的數(shù)據(jù)庫都
能識別,當要查詢的目標數(shù)據(jù)庫不能識別所述第一 SQL時,執(zhí)行以下步驟。 步驟102 :根據(jù)預置的SQL處理類,將所述第一 SQL轉換為第二 SQL。 該步驟中的轉換過程可以是解析所述第一 SQL,分解得到第一 SQL的最小語法元
素,然后根據(jù)目標數(shù)據(jù)庫的標識信息將第一 SQL的全部最小語法元素重新組合成新的SQL
此處即第二 SQL。此處的目標數(shù)據(jù)庫的標識信息是根據(jù)預置的SQL處理類獲取得到的,用來
唯一標識出一個目標數(shù)據(jù)庫。在實際應用過程中,該步驟具體的實現(xiàn)方式可以是在傳遞第
一 SQL給目標數(shù)據(jù)庫進行目標數(shù)據(jù)庫的查詢之前,插入對新建的SQL處理類中的SQL處理
方法的調(diào)用,該SQL處理方法即是第一 SQL到第二 SQL的具體實現(xiàn)方法。上述轉換得到的
第二 SQL是能夠被目標數(shù)據(jù)庫識別的語句,即符合目標數(shù)據(jù)庫的語法的語句。 步驟103 :應用所述第二SQL進行所述目標數(shù)據(jù)庫的查詢。 該步驟中的第二 SQL是由第一 SQL根據(jù)目標數(shù)據(jù)庫的標識信息轉換而得的,因此, 能夠被目標數(shù)據(jù)庫所識別,該步驟的具體實現(xiàn)方式可以是將所述第二SQL傳遞給目標數(shù) 據(jù)庫,目標數(shù)據(jù)庫再根據(jù)第二 SQL發(fā)出的命令進行相應的查詢操作。 在本實施例中,首先,通過將目標數(shù)據(jù)庫不能識別的第一 SQL進行轉換處理,得到 目標數(shù)據(jù)庫能夠識別的第二SQL ;然后,應用第二SQL進行目標數(shù)據(jù)庫的查詢。應用該方法 進行系統(tǒng)的開發(fā)只需對與數(shù)據(jù)庫相關的SQL語句進行處理,可以不涉及開發(fā)的其它過程, 從而大大降低了系統(tǒng)的開發(fā)和維護成本。本實施例所提供的數(shù)據(jù)庫查詢方法,以較低的開 發(fā)維護成本,開發(fā)出同時適合多種數(shù)據(jù)庫類型應用的系統(tǒng),實現(xiàn)對多種數(shù)據(jù)庫類型的查詢。 而且,不會出現(xiàn)由于使用開發(fā)框架所帶來的系統(tǒng)性能降低。 參見圖2,示出了本發(fā)明的一種數(shù)據(jù)庫查詢方法實施例2的流程圖,可以包括以下 步驟 步驟201 :在新建的SQL處理類中設置對當前SQL的處理方式。
其中,所述對當前SQL的處理方式具體可以為
子步驟Al :接收第一參數(shù),所述第一參數(shù)為目標數(shù)據(jù)庫的標識信息的連接;
子步驟A2 :返回第二參數(shù),所述第二參數(shù)為表示對當前SQL處理結果的字符串。
該兩個子步驟可以通過以下方法實現(xiàn)首先,新建一個SQL處理類,可以將該處理 類命名為SQLM即Proxy,此處新建SQL處理類的方法和現(xiàn)有技術中類似,并且該處理類的 名稱可以任意設置,這里只是一個具體的例子,該處理類的名稱并不影響本發(fā)明的實現(xiàn);然 后,在所述的SQL處理類中定義一個對當前SQL的處理方法,本例中的對當前SQL的處理方 法即上述的對當前SQL的處理方式。該處理方法可以命名為m即SQL。 在實際過程中,定義所述處理方法的具體過程即是配置兩個參數(shù),第一個參數(shù)需 要從外部進行接收,該參數(shù)可以為Connection類型,表示目標數(shù)據(jù)庫的標識信息的連接, 可以通過該參數(shù)獲取目標數(shù)據(jù)庫的類型和版本等標識信息,用于唯一標識出一個目標數(shù)據(jù) 庫,為后面的處理過程提供必要的信息;第二個參數(shù)為執(zhí)行完該m即SQL方法之后需要返回 的參數(shù),即是所述處理方法的返回值,可以為String類型,表示處理方法將當前SQL轉換后 的SQL,即目標數(shù)據(jù)庫最終接收到的SQL,在本例子中,即是第二 SQL。需要說明的是,上述的 內(nèi)容只是一個具體的實施例,并不能造成對該步驟的限制。
步驟202 :接收對某一類型的目標數(shù)據(jù)庫查詢的第一 SQL。 上述的第一 SQL是進行數(shù)據(jù)庫的查詢的標準語言,但是并非所有類型的數(shù)據(jù)庫均 能識別所述第一 SQL,當要查詢的目標數(shù)據(jù)庫不能識別所述第一 SQL時執(zhí)行以下步驟。
步驟203 :根據(jù)預置的SQL處理類,確定目標數(shù)據(jù)庫的標識信息。
該步驟可以通過步驟201中的名為m即SQL的處理方法中的第一參數(shù)來確定目標 數(shù)據(jù)庫的類型和版本等標識信息。當然,還可以根據(jù)系統(tǒng)的使用環(huán)境不同而使用其它方法 獲得目標數(shù)據(jù)庫標識信息,例如,可以在使用hibernate時,利用Environment類的判斷來 獲取目標數(shù)據(jù)庫的標識信息。 該步驟的保護范圍并不局限于上述獲得目標數(shù)據(jù)庫標識信息的兩種方法,能夠獲
得目標數(shù)據(jù)庫標識信息的所有方法均在該方法的保護范圍之內(nèi)。 步驟204 :解析所述第一 SQL,得到該第一 SQL的最小語法元素。 該步驟可以使用Yacc(Yet Another Compiler-Compiler,編譯器代碼生成器)工
具,解析所述的第一 SQL,從而得到該第一 SQL的最小語法元素,并且可以將所述第一 SQL的
最小語法元素以一種類似樹狀的數(shù)據(jù)結構存儲。由于Yacc工具是本領域的公知常識故在
此不再詳細介紹。當然,該步驟的實現(xiàn)還可以使用其它的解析工具,甚至,開發(fā)人員還可以
自行開發(fā)相關的解析代碼。 該步驟的保護范圍并不局限于上述解析第一 SQL的方法,所有能夠解析第一 SQL 的方法均在該方法的保護范圍之內(nèi)。 步驟205 :根據(jù)所述目標數(shù)據(jù)庫的標識信息,將所述第一 SQL的最小語法元素重新 組合成第二 SQL。 在具體實現(xiàn)過程中,本步驟可以由影射管理器來執(zhí)行。影射管理器可以根據(jù)之前 獲得的目標數(shù)據(jù)庫標識信息,選擇目標數(shù)據(jù)庫對應的影射處理類。當目標數(shù)據(jù)庫的類型和 版本均已知時,選擇預定義的該數(shù)據(jù)庫對應的影射處理類;當目標數(shù)據(jù)庫的類型已知版本 未知時,選擇目標數(shù)據(jù)庫類型對應的最大版本影射處理類;當數(shù)據(jù)庫的類型和版本均未知 時,選擇預定義的數(shù)據(jù)庫類型對應的影射處理類。根據(jù)上述原則選擇出目標數(shù)據(jù)庫對應的
6影射處理類后,由該影射處理類遍歷解析得到的全部的第一 SQL的最小語法元素,重新組 合成第二 SQL,該第二 SQL能夠被目標數(shù)據(jù)庫所識別,也是最終發(fā)送至目標數(shù)據(jù)庫的SQL。
其中,所述的影射管理器可以是一個基于XML (Extensible Mark-upLanguage,可 擴展標記語言)配置的可擴展結構,該影射管理器可以通過定義系統(tǒng)支持的各種數(shù)據(jù)庫的 類型及各類型數(shù)據(jù)庫支持的不同版本,以及可以為每種類型的每個版本數(shù)據(jù)庫的語法元素 定義新的語法,從而得到當前SQL語法到目標數(shù)據(jù)庫SQL語法的影射關系。影射管理器通 過迭代子遍歷當前SQL的全部語法元素,根據(jù)所述當前SQL語法到目標數(shù)據(jù)庫SQL語法的 影射關系,重新組合成新的SQL,本例中即第二 SQL。本例中的當前SQL即第一 SQL。
步驟206 :從所述第二 SQL獲取目標數(shù)據(jù)庫的標識信息,以定位目標數(shù)據(jù)庫。
解析上一步得到的目標數(shù)據(jù)庫能夠識別的第二 SQL,從而獲得目標數(shù)據(jù)庫的標識 信息,根據(jù)該標識信息定位要查詢的目標數(shù)據(jù)庫,并將所述第二 SQL發(fā)送至目標數(shù)據(jù)庫。
步驟207 :根據(jù)第二SQL對目標數(shù)據(jù)庫進行相應的存取、修改、刪除或管理操作。
根據(jù)目標數(shù)據(jù)庫接收到的所述第二 SQL,對目標數(shù)據(jù)庫中的數(shù)據(jù)進行相應存取、修 改或刪除,或對數(shù)據(jù)庫系統(tǒng)進行管理。 通過以上的方法實施例的描述,所屬領域的技術人員可以清楚地了解到本發(fā)明可 借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當然也可以通過硬件,但很多情況下前者 是更佳的實施方式。基于這樣的理解,本發(fā)明的技術方案本質上或者說對現(xiàn)有技術做出貢 獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質中,包 括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網(wǎng)絡設備等)執(zhí) 行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質包括只讀存儲器 (ROM)、隨機存取存儲器(RAM)、磁碟或者光盤等各種可以存儲程序代碼的介質。
相應于上面的方法實施例,本發(fā)明實施例還提供一種數(shù)據(jù)庫查詢裝置。參見圖3, 示出了一種數(shù)據(jù)庫查詢裝置實施例1的結構示意圖,可以包括 接收單元301,用于接收用戶發(fā)送的對某一類型的目標數(shù)據(jù)庫查詢的第一SQL。
上述的第一 SQL是進行數(shù)據(jù)庫的查詢的標準語言,但是并非所有類型的數(shù)據(jù)庫都 能識別,當要查詢的目標數(shù)據(jù)庫不能識別所述第一 SQL時,以下的功能模塊共同完成對目 標數(shù)據(jù)庫的查詢。 轉換單元302,用于根據(jù)預置的SQL處理類,將所述第一 SQL轉換為第二 SQL。
該功能模塊的具體工作過程可以是解析所述第一 SQL,分解得到第一 SQL的最小 語法元素,然后根據(jù)目標數(shù)據(jù)庫的標識信息將第一 SQL的全部最小語法元素重新組合成新 的SQL此處即第二 SQL。此處的目標數(shù)據(jù)庫的標識信息是根據(jù)預置的SQL處理類獲取得到 的,用來用于唯一標識出一個目標數(shù)據(jù)庫。在實際應用過程中,該功能模塊的具體實現(xiàn)方式 可以是在傳遞第一 SQL給目標數(shù)據(jù)庫進行目標數(shù)據(jù)庫的查詢之前,插入對新建的SQL處 理類中的SQL處理方法的調(diào)用,該SQL處理方法即是第一 SQL到第二 SQL的具體實現(xiàn)方法。 上述轉換得到的第二 SQL是能夠被目標數(shù)據(jù)庫識別的語句,即符合目標數(shù)據(jù)庫的語法的語 句。 查詢單元303,用于應用所述第二 SQL進行所述目標數(shù)據(jù)庫的查詢。 該功能模塊接收的第二 SQL是由第一 SQL根據(jù)目標數(shù)據(jù)庫的標識信息轉換而得
的,因此,能夠被目標數(shù)據(jù)庫所識別,該功能模塊的具體實現(xiàn)方式可以是將所述第二 SQL傳遞給目標數(shù)據(jù)庫,目標數(shù)據(jù)庫再根據(jù)第二SQL發(fā)出的命令進行相應的查詢操作。 在本實施例中,首先,通過轉換單元302將目標數(shù)據(jù)庫不能識別的第一 SQL進行轉
換處理,得到目標數(shù)據(jù)庫能夠識別的第二 SQL ;然后,查詢單元303應用第二 SQL進行目標
數(shù)據(jù)庫的查詢。應用該裝置進行系統(tǒng)的開發(fā)只需對與數(shù)據(jù)庫相關的SQL語句進行處理,可
以不涉及開發(fā)的其它過程,從而大大降低了系統(tǒng)的開發(fā)和維護成本。本實施例所提供的數(shù)
據(jù)庫查詢裝置,以較低的開發(fā)維護成本,開發(fā)出同時適合多種數(shù)據(jù)庫類型應用的系統(tǒng),實現(xiàn)
對多種數(shù)據(jù)庫類型的查詢,而且,不會出現(xiàn)由于使用開發(fā)框架所帶來的系統(tǒng)性能降低。 參見圖4,示出了一種數(shù)據(jù)庫查詢裝置實施例2的結構示意圖,可以包括 預置單元401,用于在新建的SQL處理類中設置對當前SQL的處理方式。 其中,所述對當前SQL的處理方式具體可以為 接收第一參數(shù),所述第一參數(shù)為目標數(shù)據(jù)庫的標識信息的連接; 返回第二參數(shù),所述第二參數(shù)為表示對當前SQL處理結果的字符串。 該功能模塊可以通過以下過程實現(xiàn)上述對當前SQL的處理方式的設置 首先,新建一個SQL處理類,可以將該處理類命名為SQLM即Proxy ,此處新建SQL處
理類的方法和現(xiàn)有技術中類似,并且該處理類的名稱可以任意設置,這里只是一個具體的
例子,該處理類的名稱并不影響本發(fā)明的實現(xiàn);然后,在所述的SQL處理類中定義一個對當
前SQL的處理方法,本例中的對當前SQL的處理方法即上述的對當前SQL的處理方式。該
處理方法可以命名為m即SQL。 在實際過程中,定義所述處理方法的具體過程即是配置兩個參數(shù),第一個參數(shù)需 要從外部進行接收,該參數(shù)可以為Connection類型,表示目標數(shù)據(jù)庫的標識信息的連接, 可以通過該參數(shù)獲取目標數(shù)據(jù)庫的類型和版本等標識信息,用于唯一標識出一個目標數(shù)據(jù) 庫,為后面的處理過程提供必要的信息;第二個參數(shù)為執(zhí)行完該m即SQL方法之后需要返回 的參數(shù),即是所述處理方法的返回值,可以為String類型,表示處理方法將當前SQL轉換后 的SQL,即目標數(shù)據(jù)庫最終接收到的SQL,在本例子中,即是第二SQL。需要說明的是,上述的 內(nèi)容只是一個具體的實施例,并不能造成對該功能模塊的限制。 接收單元402,用于接收用戶發(fā)送的對某一類型的目標數(shù)據(jù)庫查詢的第一SQL。
上述的第一 SQL是進行數(shù)據(jù)庫的查詢的標準語言,但是并非所有類型的數(shù)據(jù)庫均 能識別所述第一 SQL,當要查詢的目標數(shù)據(jù)庫不能識別所述第一 SQL時,有以下功能模塊共 同完成對目標數(shù)據(jù)庫的查詢。 第一確定單元403,用于根據(jù)預置的SQL處理類,確定即將查詢的目標數(shù)據(jù)庫的標 識信息。 該功能模塊可以通過預置單元401定義的名為m即SQL的處理方法中的第一參數(shù), 確定目標數(shù)據(jù)庫的類型和版本等標識信息。當然,還可以根據(jù)系統(tǒng)的使用環(huán)境不同而使用 其它方法獲得目標數(shù)據(jù)庫標識信息,例如,可以在使用hibernate時,利用Environment類 的判斷來獲取目標數(shù)據(jù)庫的標識信息。能夠獲得目標數(shù)據(jù)庫標識信息的所有功能模塊均在 該裝置的保護范圍之內(nèi)。 解析單元404,用于解析所述第一 SQL,得到該第一 SQL的最小語法元素。 該功能模塊可以使用Yacc(Yet Another Compiler-Compiler,編譯器代碼生成
器)工具,解析所述的第一 SQL,從而得到該第一 SQL的最小語法元素,并且可以將所述第
8一 SQL的最小語法元素以一種類似樹狀的數(shù)據(jù)結構存儲。由于Yacc工具是本領域的公知 常識故在此不再詳細介紹。當然,該功能模塊的實現(xiàn)還可以使用其它的解析工具,甚至,開 發(fā)人員還可以自行開發(fā)相關的解析代碼。 該功能模塊的保護范圍并不局限于上述解析第一 SQL的方式,所有能夠實現(xiàn)解析 第一SQL模塊均在該裝置的保護范圍之內(nèi)。 組合單元405,用于根據(jù)所述目標數(shù)據(jù)庫的標識信息,將所述第一 SQL的最小語法 元素重新組合為第二 SQL。 在具體實現(xiàn)過程中,該功能模塊可以是影射管理器。影射管理器可以根據(jù)接收到
的之前獲得的目標數(shù)據(jù)庫標識信息,選擇目標數(shù)據(jù)庫對應的影射處理類。當目標數(shù)據(jù)庫的 類型和版本均已知時,選擇預定義的該數(shù)據(jù)庫對應的影射處理類;當目標數(shù)據(jù)庫的類型已
知版本未知時,選擇目標數(shù)據(jù)庫類型對應的最大版本影射處理類;當數(shù)據(jù)庫的類型和版本 均未知時,選擇預定義的數(shù)據(jù)庫類型對應的影射處理類。根據(jù)上述原則選擇出目標數(shù)據(jù)庫 對應的影射處理類后,由該影射處理類遍歷解析得到的全部的第一 SQL的最小語法元素, 重新組合成第二 SQL,該第二 SQL能夠被目標數(shù)據(jù)庫所識別,也是最終發(fā)送至目標數(shù)據(jù)庫的 SQL。 其中,所述的影射管理器可以是一個基于XML (Extensible Mark-upLanguage,可 擴展標記語言)配置的可擴展結構,該影射管理器可以通過定義系統(tǒng)支持的各種數(shù)據(jù)庫的 類型及各類型數(shù)據(jù)庫支持的不同版本,以及可以為每種類型的每個版本數(shù)據(jù)庫的語法元素 定義新的語法,從而得到當前SQL語法到目標數(shù)據(jù)庫SQL語法的影射關系。然后,影射管理 器通過迭代子遍歷當前SQL的全部語法元素,根據(jù)所述當前SQL語法到目標數(shù)據(jù)庫SQL語 法的影射關系,重新組合成新的SQL,本例中即第二 SQL。本例中的當前SQL即第一 SQL。
第二確定單元406,用于從所述第二 SQL獲取目標數(shù)據(jù)庫的標識信息,以定位目標 數(shù)據(jù)庫。 該功能模塊可以通過解析接收到的目標數(shù)據(jù)庫能夠識別的第二SQL,從而獲得目 標數(shù)據(jù)庫的標識信息,根據(jù)該標識信息定位要查詢的目標數(shù)據(jù)庫,并將所述第二 SQL發(fā)送 至目標數(shù)據(jù)庫。 執(zhí)行單元407,用于根據(jù)第二SQL對目標數(shù)據(jù)庫進行相應的讀取、修改、刪除或管 理操作。 該功能模塊可以根據(jù)接收到的所述第二SQL,對目標數(shù)據(jù)庫中的數(shù)據(jù)進行相應存 取、修改或刪除,或對數(shù)據(jù)庫系統(tǒng)進行管理。 可以理解的是,本發(fā)明可用于眾多通用或專用的計算系統(tǒng)環(huán)境或配置中。例如個
人計算機、服務器計算機、手持設備或便攜式設備、平板型設備、多處理器系統(tǒng)、基于微處理 器的系統(tǒng)、置頂盒、可編程的消費電子設備、網(wǎng)絡PC、小型計算機、大型計算機、包括以上任
何系統(tǒng)或設備的分布式計算環(huán)境等等。 本發(fā)明可以在由計算機執(zhí)行的計算機可執(zhí)行指令的一般上下文中描述,例如程序 模塊。 一般地,程序模塊包括執(zhí)行特定任務或實現(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對象、組 件、數(shù)據(jù)結構等等。也可以在分布式計算環(huán)境中實踐本發(fā)明,在這些分布式計算環(huán)境中,由 通過通信網(wǎng)絡而被連接的遠程處理設備來執(zhí)行任務。在分布式計算環(huán)境中,程序模塊可以 位于包括存儲設備在內(nèi)的本地和遠程計算機存儲介質中。
需要說明的是,在本文中,諸如第一和第二等之類的關系術語僅僅用來將一個實 體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存 在任何這種實際的關系或者順序。而且,術語"包括"、"包含"或者其任何其他變體意在涵 蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設備不僅包括那些要 素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設備
所固有的要素。在沒有更多限制的情況下,由語句"包括一個......"限定的要素,并不排
除在包括所述要素的過程、方法、物品或者設備中還存在另外的相同要素。 對于裝置實施例而言,由于其基本對應于方法實施例,所以相關之處參見方法實
施例的部分說明即可。以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件
說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以
不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡單元上??梢愿鶕?jù)實際的
需要選擇其中的部分或者全部模塊來實現(xiàn)本實施例方案的目的。本領域普通技術人員在不
付出創(chuàng)造性勞動的情況下,即可以理解并實施。 以上所述僅是本發(fā)明的具體實施方式
,應當指出,對于本技術領域的普通技術人 員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應 視為本發(fā)明的保護范圍。
10
權利要求
一種數(shù)據(jù)庫查詢方法,其特征在于,具體包括接收對某一類型的目標數(shù)據(jù)庫查詢的第一結構化查詢語言SQL;根據(jù)預置的SQL處理類,將所述第一SQL轉換為第二SQL;應用所述第二SQL進行所述目標數(shù)據(jù)庫的查詢。
2. 根據(jù)權利要求1所述的方法,其特征在于,所述接收某一類型的目標數(shù)據(jù)庫查詢的 第一結構化查詢語言SQL之前,還包括在新建的SQL處理類中設置對當前SQL的處理方式。
3. 根據(jù)權利要求2所述的方法,其特征在于,所述對當前SQL的處理方式,具體為 接收第一參數(shù),所述第一參數(shù)為目標數(shù)據(jù)庫的標識信息的連接; 返回第二參數(shù),所述第二參數(shù)為表示對當前SQL處理結果的字符串。
4. 根據(jù)權利要求1所述的方法,其特征在于,所述根據(jù)預置的SQL處理類,將所述第一 SQL轉換為第二 SQL,具體包括根據(jù)預置的SQL處理類,確定即將查詢的目標數(shù)據(jù)庫的標識信息; 解析所述第一 SQL,得到該第一 SQL的最小語法元素;根據(jù)所述目標數(shù)據(jù)庫的標識信息,將所述第一 SQL的最小語法元素重新組合為第二SQL。
5. 根據(jù)權利要求4所述的方法,其特征在于,所述應用所述第二SQL進行目標數(shù)據(jù)庫的 查詢,具體包括從所述第二 SQL獲取目標數(shù)據(jù)庫的標識信息,以定位目標數(shù)據(jù)庫; 根據(jù)第二SQL對目標數(shù)據(jù)庫進行相應的存取、修改、刪除或管理操作。
6. —種數(shù)據(jù)庫查詢裝置,其特征在于,具體包括 接收單元,用于接收對某一類型的目標數(shù)據(jù)庫查詢的第一 SQL ; 轉換單元,用于根據(jù)預置的SQL處理類,將所述第一 SQL轉換為第二 SQL ; 查詢單元,用于應用所述第二SQL進行所述目標數(shù)據(jù)庫的查詢。
7. 根據(jù)權要求6所述的裝置,其特征在于,還包括 預置單元,用于在新建的SQL處理類中設置對當前SQL的處理方式。
8. 根據(jù)權利要求7所述的裝置,其特征在于,所述對當前SQL的處理方式,具體為接 收第一參數(shù),所述第一參數(shù)為目標數(shù)據(jù)庫的標識信息的連接;返回第二參數(shù),所述第二參數(shù)為表示對當前SQL處理結果的字符串。
9. 根據(jù)權利要求6所述的裝置,其特征在于,所述轉換單元包括 第一確定單元,用于根據(jù)預置的SQL處理類,確定即將查詢的目標數(shù)據(jù)庫的標識信息; 解析單元,用于解析所述第一 SQL,得到該第一 SQL的最小語法元素; 組合單元,用于根據(jù)所述目標數(shù)據(jù)庫的標識信息,將所述第一 SQL的最小語法元素重新組合為第二 SQL。
10. 根據(jù)權利要求9所述的裝置,其特征在于,所述查詢單元具體包括 第二確定單元,用于從所述第二 SQL獲取目標數(shù)據(jù)庫的標識信息,以定位目標數(shù)據(jù)庫; 執(zhí)行單元,用于根據(jù)第二SQL對目標數(shù)據(jù)庫進行相應的讀取、修改、刪除或管理操作。
全文摘要
本發(fā)明實施例公開了一種數(shù)據(jù)庫查詢方法及裝置,所述數(shù)據(jù)庫查詢方法,具體包括接收對某一類型的目標數(shù)據(jù)庫查詢的第一結構化查詢語言SQL;根據(jù)預置的SQL處理類,將所述第一SQL轉換為第二SQL;應用所述第二SQL進行所述目標數(shù)據(jù)庫的查詢。應用本發(fā)明提供的數(shù)據(jù)庫查詢方法,使用很小的代碼開發(fā)量或修改量就能夠實現(xiàn)某一SQL到另一SQL的轉換,從而實現(xiàn)對不同數(shù)據(jù)庫類型的支持。本發(fā)明提供的數(shù)據(jù)庫查詢方法以較低的開發(fā)維護成本,開發(fā)出同時適合多種數(shù)據(jù)庫類型應用的系統(tǒng),實現(xiàn)對多種數(shù)據(jù)庫類型的支持,而且,不會出現(xiàn)由于使用開發(fā)框架所帶來的系統(tǒng)性能的降低。
文檔編號G06F17/30GK101706810SQ20091023825
公開日2010年5月12日 申請日期2009年11月23日 優(yōu)先權日2009年11月23日
發(fā)明者李永利, 袁大勇, 賈林, 錢世啟 申請人:北京中創(chuàng)信測科技股份有限公司