專利名稱:一種數(shù)據(jù)庫動(dòng)態(tài)查詢的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)庫應(yīng)用領(lǐng)域,特別是涉及一種數(shù)據(jù)庫動(dòng)態(tài)查詢的方法和系統(tǒng)。
背景技術(shù):
在目前的很多軟件應(yīng)用系統(tǒng)(例如,J2EE企業(yè)應(yīng)用等)中,經(jīng)常需要把 程序和數(shù)據(jù)庫結(jié)合起來進(jìn)行使用,即經(jīng)常面臨訪問數(shù)據(jù)庫的問題,而數(shù)據(jù)庫查 詢則是最常用的一個(gè)操作。并且,由于企業(yè)應(yīng)用中業(yè)務(wù)的復(fù)雜性和多變性,數(shù) 據(jù)庫查詢是使用頻率非常高的功能模塊,導(dǎo)致對(duì)數(shù)據(jù)查詢模塊的性能、健壯性 和擴(kuò)展性要求比較高?,F(xiàn)有技術(shù)中, 一般采用JDBC(Java Database Connectivity) API通過編程實(shí) 現(xiàn)數(shù)據(jù)庫查詢功能模塊。JDBCAPI是Java語言訪問數(shù)據(jù)庫的一種規(guī)范, 一套 Java數(shù)據(jù)庫的編程接口 ,是一組標(biāo)準(zhǔn)的Java語言中的接口和類,使用這些接 口和類,Java客戶端程序可以訪問各種不同類型的數(shù)據(jù)庫。比如建立數(shù)據(jù)庫連 接、執(zhí)行SQL語句進(jìn)行數(shù)據(jù)的存取操作等。但是這種編程比較低級(jí),導(dǎo)致工 作量大,并且容易出錯(cuò);其次,由于編程代碼量過多,還導(dǎo)致了應(yīng)用程序代碼 和數(shù)據(jù)訪問代碼之間的依賴過多,代碼的適應(yīng)性和可擴(kuò)展性較差,不利于維護(hù)。 這些缺陷都難以滿足目前數(shù)據(jù)庫查詢?cè)L問的需求,導(dǎo)致效率較低?,F(xiàn)有技術(shù)還經(jīng)常使用數(shù)據(jù)庫視圖技術(shù)來解決上述問題。視圖具有以下特點(diǎn)A、 一些被經(jīng)常使用的查詢可以被定義為視圖,從而使得用戶不必為以后 的操作每次指定全部的條件,簡(jiǎn)化了用戶對(duì)數(shù)據(jù)的理解,也可以筒化他們的操 作。B、 通過視圖用戶只能查詢和修改他們所能見到的數(shù)據(jù),數(shù)據(jù)庫中的其它 數(shù)據(jù)則既看不見也取不到;即可以保證數(shù)據(jù)安全性。C、 使用數(shù)據(jù)庫視圖技術(shù)后,程序可以建立在視圖之上,從而程序與數(shù)據(jù) 庫表被視圖分割開來,即視圖可以使應(yīng)用程序和數(shù)據(jù)庫表在一定程度上獨(dú)立。但是數(shù)據(jù)庫視圖技術(shù)仍然存在一些不可接受的缺陷1、 數(shù)據(jù)庫視圖技術(shù)只能按照SQL編寫邏輯,沒有面向?qū)ο蟮木幊探涌冢?不利于用戶理解,不能夠方便的設(shè)置條件參數(shù)。2、 —見圖定義完成后,不能在運(yùn)行期動(dòng)態(tài)修改。而由于大型數(shù)據(jù)庫應(yīng)用程 序中經(jīng)常需要使用到非常多的數(shù)據(jù)庫查詢方式,業(yè)務(wù)復(fù)雜且隨著業(yè)務(wù)的擴(kuò)展而 較多變化,這么多的查詢語句定義和維護(hù)工作量都很大;而且無論在設(shè)計(jì)期定 義多少種查詢方式,都不可能把未來所有的查詢方式窮舉并定義出來,因此如 果外部環(huán)境出現(xiàn)新的變化時(shí),而視圖又不能動(dòng)態(tài)修改,則應(yīng)用程序難以適應(yīng)查 詢需求的變化。3、 視圖適應(yīng)能力差,工作效率低下,不易于維護(hù); 一般視圖需要每次把 可能用到的所有字段都查詢出來,這樣導(dǎo)致查詢數(shù)據(jù)量倍增,運(yùn)行效率低;反 之如果只查特定場(chǎng)景所需字段則通用性不佳,需要針對(duì)每一種場(chǎng)景分別設(shè)計(jì)視 圖,導(dǎo)致維護(hù)工作量大量增加。當(dāng)系統(tǒng)中的數(shù)據(jù)表關(guān)系發(fā)生變化,或者查詢需 求發(fā)生變化時(shí),所有相關(guān)的視圖都需要修改,出錯(cuò)機(jī)率較大。4、 視圖在整個(gè)應(yīng)用層共享,不能實(shí)現(xiàn)會(huì)話級(jí)隔離,有可能導(dǎo)致各個(gè)會(huì)話 之間的相互影響。總之,目前需要本領(lǐng)域技術(shù)人員迫切解決的一個(gè)技術(shù)問題就是如何能夠 創(chuàng)新的提出一種數(shù)據(jù)庫查詢機(jī)制,可以非常方便的應(yīng)對(duì)復(fù)雜多變的數(shù)據(jù)庫查 詢,并能夠?qū)崿F(xiàn)會(huì)話級(jí)的隔離,以提高用戶查詢數(shù)據(jù)庫的效率。發(fā)明內(nèi)容本發(fā)明所要解決的技術(shù)問題是提供一種數(shù)據(jù)庫查詢的方法和裝置,可以非 常方便的在運(yùn)行期對(duì)查詢依據(jù)進(jìn)行修改,并能夠?qū)崿F(xiàn)會(huì)話級(jí)的隔離,以提高用 戶查詢數(shù)據(jù)庫的效率。為了解決上述問題,本發(fā)明公開了一種數(shù)據(jù)庫動(dòng)態(tài)查詢的方法,包括依 據(jù)用戶的指定信息,從預(yù)置的多個(gè)元數(shù)據(jù)中查找相應(yīng)的元數(shù)據(jù);所述元數(shù)據(jù)包 括關(guān)于查詢字段的描述、關(guān)于過濾條件的描述、關(guān)于排序條件的描述以及關(guān)于 查詢子對(duì)象的描述;依據(jù)所獲取的元數(shù)據(jù)信息,生成查詢對(duì)象;調(diào)用參數(shù)接口, 依據(jù)實(shí)際需求修改查詢字段、過濾條件、排序條件及查詢子對(duì)象四項(xiàng)內(nèi)容中的任一項(xiàng)或者任意組合項(xiàng);依據(jù)查詢對(duì)象及其參數(shù)修改信息,生成SQL查詢語 句;執(zhí)行所述SQL查詢語句,完成數(shù)據(jù)庫查詢,返回?cái)?shù)據(jù)結(jié)果集。
優(yōu)選的,所述預(yù)置的元數(shù)據(jù)關(guān)于查詢子對(duì)象的描述中還可以包括關(guān)于多 個(gè)查詢子對(duì)象關(guān)系的描述。優(yōu)選的,所述調(diào)用參數(shù)接口對(duì)查詢子對(duì)象進(jìn)行修改的內(nèi)容還可以包括修 改多個(gè)查詢子對(duì)象的關(guān)系。優(yōu)選的,所述動(dòng)態(tài)查詢方法還可以包括將直接依據(jù)查詢獲取的元數(shù)據(jù)信 息而生成的查詢對(duì)象置于緩存中,并復(fù)制生成一新的查詢對(duì)象實(shí)例返回給調(diào)用 者使用。優(yōu)選的,所述動(dòng)態(tài)查詢方法還可以包括當(dāng)前調(diào)用者使用的查詢結(jié)束后, 銷毀該用戶使用的查詢對(duì)象實(shí)例。依據(jù)本發(fā)明的另一優(yōu)選實(shí)施例,還公開了一種數(shù)據(jù)庫動(dòng)態(tài)查詢的裝置,包 括以下部件元數(shù)據(jù)查找模塊,用于依據(jù)用戶的指定信息,從預(yù)置的多個(gè)元數(shù)據(jù)中查找 相應(yīng)的元數(shù)據(jù);所述元數(shù)據(jù)包括關(guān)于查詢字段的描述、關(guān)于過濾條件的描述、 關(guān)于排序條件的描述以及關(guān)于查詢子對(duì)象的描述;查詢對(duì)象生成模塊,用于依據(jù)所獲取的元數(shù)據(jù)信息,生成查詢對(duì)象;參數(shù)修改模塊,用于調(diào)用參數(shù)接口,依據(jù)實(shí)際需求修改查詢字段、過濾條 件、排序條件及查詢子對(duì)象四項(xiàng)內(nèi)容中的任一項(xiàng)或者任意組合項(xiàng);SQL查詢語句生成模塊,用于依據(jù)查詢對(duì)象及其參數(shù)修改信息,生成SQL 查詢語句;查詢執(zhí)行模塊,用于執(zhí)行所述SQL查詢語句,完成數(shù)據(jù)庫查詢,返回?cái)?shù) 據(jù)結(jié)果集。優(yōu)選的,所述預(yù)置的元數(shù)據(jù)關(guān)于查詢子對(duì)象的描述中還包括關(guān)于多個(gè)查 詢子對(duì)象關(guān)系的描述。優(yōu)選的,所述參數(shù)修改模塊對(duì)查詢子對(duì)象進(jìn)行修改的內(nèi)容還包括修改多 個(gè)查詢子對(duì)象的關(guān)系。優(yōu)選的,所述動(dòng)態(tài)查詢裝置還可以包括查詢對(duì)象實(shí)例創(chuàng)建模塊,用于將 所述查詢對(duì)象生成才莫塊得到的查詢對(duì)象置于緩存中,并復(fù)制生成一新的查詢對(duì) 象實(shí)例返回給調(diào)用者使用。優(yōu)選的,所述動(dòng)態(tài)查詢裝置還可以包括查詢對(duì)象實(shí)例銷毀^t塊,用于當(dāng)前調(diào)用者使用的查詢結(jié)束后,銷毀該用戶使用的查詢對(duì)象實(shí)例。與現(xiàn)有^&術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn)為了解決查詢方式多的問題,本發(fā)明提供了一種解決途徑,應(yīng)用程序可以 把各種查詢方式分門別類定義成QUERY元數(shù)據(jù),在運(yùn)行時(shí)傳入過濾參數(shù)等來 實(shí)現(xiàn)不同的查詢,這樣大大減少了查詢語句的數(shù)量,但是還能夠滿足紛繁復(fù)雜 的查詢需求;而且使用面向?qū)ο蟮姆绞骄幋a也更方便。同時(shí)本發(fā)明提供的設(shè)計(jì)思想及管理方式則可以很好地解決查詢需求變化 的問題,動(dòng)態(tài)QUERY在運(yùn)行期可以動(dòng)態(tài)改變QUERY對(duì)象內(nèi)部結(jié)構(gòu),包括查 詢哪些字段、關(guān)聯(lián)哪些數(shù)據(jù)庫表、以及使用哪些過濾條件等,從而改變最終查 詢方式,這樣一來顯著地降低了應(yīng)用程序維護(hù)的復(fù)雜度,能夠大幅度的提高查 詢機(jī)制的適應(yīng)性和效率。
圖1是本發(fā)明一種數(shù)據(jù)庫動(dòng)態(tài)查詢的方法實(shí)施例的步驟流程圖; 圖2是本發(fā)明 一種數(shù)據(jù)庫動(dòng)態(tài)查詢的裝置實(shí)施例的結(jié)構(gòu)框圖。
具體實(shí)施方式
為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和具體實(shí)施方式
對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說明。本發(fā)明可用于眾多通用或?qū)S玫挠?jì)算系統(tǒng)環(huán)境或配置中。例如個(gè)人計(jì)算 機(jī)、服務(wù)器計(jì)算機(jī)、手持設(shè)備或便攜式設(shè)備、平板型設(shè)備、多處理器系統(tǒng)、包 括以上任何系統(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ì)中。本發(fā)明中的"對(duì)象"一詞屬于本領(lǐng)域的通用術(shù)語,在本說明書中就不對(duì)其進(jìn) 行詳細(xì)解釋了。 一般的,在Java中, 一個(gè)類, 一個(gè)方法, 一個(gè)變量都可以作 為對(duì)象,其中,有些對(duì)象可以直接去用(比如基本變量類型,或一些靜態(tài)的類、 方法、變量等),而有些對(duì)象不可以直接去用,需要?jiǎng)?chuàng)建這個(gè)對(duì)象的實(shí)例(這樣, 既能實(shí)現(xiàn)對(duì)象的功能,又不會(huì)直接破壞對(duì)象的構(gòu)造)。參照?qǐng)D1,示出了本發(fā)明一種數(shù)據(jù)庫動(dòng)態(tài)查詢的方法實(shí)施例,可以包括步驟IOI、依據(jù)用戶的指定信息,從預(yù)置的多個(gè)元數(shù)據(jù)中查找相應(yīng)的元婆: 據(jù);所述元數(shù)據(jù)包括關(guān)于查詢字段的描述、關(guān)于過濾條件的描述、關(guān)于排序條 件的描述以及關(guān)于查詢子對(duì)象的描述;步驟102、依據(jù)所獲取的元數(shù)據(jù)信息,生成查詢對(duì)象;步驟103、調(diào)用參數(shù)接口,依據(jù)實(shí)際需求修改查詢字段、過濾條件、排序 條件及查詢子對(duì)象四項(xiàng)內(nèi)容中的任一項(xiàng)或者任意組合項(xiàng);步驟104、依據(jù)查詢對(duì)象及其參數(shù)修改信息,生成SQL查詢語句;步驟105、執(zhí)行所述SQL查詢語句,完成數(shù)據(jù)庫查詢,返回?cái)?shù)據(jù)結(jié)果集。由于本發(fā)明創(chuàng)新的提出了一種QUERY機(jī)制,因此,為了便于說明,在本 說明書中一般稱之為QUERY元數(shù)據(jù),QUERY對(duì)象(步驟102中的查詢對(duì)象)。步驟101中的元數(shù)據(jù)是關(guān)于數(shù)據(jù)的數(shù)據(jù);在程序中元數(shù)據(jù)不是被加工的對(duì) 象,而是通過其值的改變來改變程序的行為的數(shù)據(jù)。它在運(yùn)行過程中起著以解 釋方式控制程序行為的作用。例如,在設(shè)計(jì)期,技術(shù)人員可以對(duì)應(yīng)用需求中的 數(shù)據(jù)查詢格式進(jìn)行抽象建才莫,用面向?qū)ο蟮恼Z言對(duì)數(shù)據(jù)查詢進(jìn)行描述,并保存 為XML格式的元數(shù)據(jù)。該XML文件主要是對(duì)原有平臺(tái)的數(shù)據(jù)查詢格式的一 種抽象歸類后形成的描述性數(shù)據(jù)。本實(shí)施例中提及的"設(shè)計(jì)時(shí)"和"運(yùn)行時(shí)"屬于本技術(shù)領(lǐng)域的專業(yè)術(shù)語,其 中,"設(shè)計(jì)時(shí)"是指軟件工程師設(shè)計(jì)QUERY機(jī)制的軟件工程階段;而"運(yùn)行時(shí)" 是指該QUERY機(jī)制被用戶調(diào)用而實(shí)際運(yùn)行的軟件工程階段。下面對(duì)元數(shù)據(jù)的預(yù)置過程進(jìn)行簡(jiǎn)單描述。其主要目的是針對(duì)不同的數(shù)據(jù)查 詢需求要分別設(shè)定QUERY元數(shù)據(jù),因?yàn)橥ǔ2煌腝UERY元數(shù)據(jù)之間所指 定的實(shí)體表關(guān)聯(lián)關(guān)系是不同的,面向的查詢用戶也不同,所以要分類設(shè)定,以 示區(qū)別。例如,對(duì)于銷售訂單和員工表,可以關(guān)聯(lián)起來定義一個(gè)QUERY元數(shù)
據(jù),查詢銷售訂單和相關(guān)的銷售人員信息;而采購訂單和員工表也可以關(guān)聯(lián)起 來定義一個(gè)QUERY元數(shù)據(jù),用于查詢釆購訂單和相關(guān)采購人員信息。這兩種 查詢?cè)诓樵兡康纳巷@然是不同的,使用者也不同,可以認(rèn)為是兩類查詢需求。 具體在使用中根據(jù)不同的應(yīng)用場(chǎng)景可以有所變化,如某些情況下只查詢部分字 段,某些情況下查詢條件不同等,但基本都可以歸在這兩類查詢之中。步驟101中的用戶指定信息,可以為QUERY元數(shù)據(jù)的關(guān)4建值,例如, QUERY元數(shù)據(jù)等。為了便于查詢,每個(gè)QUERY元數(shù)據(jù)均應(yīng)具有一個(gè)唯一的 KEY,用戶通過KEY來指定期望的QUERY元數(shù)據(jù)。步驟104中的SQL是Structured Query Language(結(jié)構(gòu)化查詢語言)的縮寫。 SQL是專為數(shù)據(jù)庫而建立的操作命令集,是高級(jí)的非過程化編程語言,允許 用戶在高層數(shù)據(jù)結(jié)構(gòu)上工作。其不要求用戶指定對(duì)數(shù)據(jù)的存放方法,也不需要 用戶了解具體的數(shù)據(jù)存放方式,所以具有完全不同底層結(jié)構(gòu)的不同數(shù)據(jù)庫系統(tǒng) 可以使用相同的SQL語言作為數(shù)據(jù)輸入與管理的接口。由于SQL語言屬于本 領(lǐng)域的公知技術(shù),在此不再詳述。對(duì)于步驟104自動(dòng)生成SQL語句的過程,也屬于本領(lǐng)域的常用技術(shù)。例 如,本領(lǐng)域技術(shù)人員經(jīng)常會(huì)通過O-RMapping框架技術(shù)生成SQL語句。ORM, 即Object-Relation Mapping,它的作用是在關(guān)系型數(shù)據(jù)庫和對(duì)象之間作一個(gè)映 射,這樣,技術(shù)人員在具體的操作數(shù)據(jù)庫的時(shí)候,就不需要再去和復(fù)雜的SQL 語句打交道,只要像平時(shí)操作對(duì)象一樣操作它就可以了。例如,利用O/R Mapping保存、刪除或者讀取對(duì)象,而由O/R Mapping負(fù)責(zé)生成SQL語句即 可。在圖1所示的實(shí)施例中,通過步驟103的參數(shù)修改,就可以實(shí)現(xiàn)滿足多種 需求的動(dòng)態(tài)查詢。 一般的,數(shù)據(jù)查詢就是從大量的數(shù)據(jù)中選出用戶需要的那部 分?jǐn)?shù)據(jù);但是在實(shí)際應(yīng)用中出于性能考慮,不可能每次都把所有的數(shù)據(jù)字段都 查詢出來返回給用戶(會(huì)導(dǎo)致查詢過程和傳輸過程冗長(zhǎng)),而是根據(jù)實(shí)際需要 來查詢,即存在用戶選擇查詢字段的情況,所以就產(chǎn)生了動(dòng)態(tài)查詢的需求。例如在某個(gè)場(chǎng)景中用戶可能需要查詢用戶名A和地址信息B,在第二個(gè) 場(chǎng)景中查詢的是用戶名A和電話C,第三個(gè)場(chǎng)景中用戶查詢的可能是用戶名A 和崗位名稱D。而在傳統(tǒng)查詢方式中,所有的查詢都需要分別定義不同的查詢
來實(shí)現(xiàn);而本發(fā)明則只需要預(yù)置一種QUERY元數(shù)據(jù)就可以滿足上述的所有要 求了;因?yàn)椴还懿樵冏侄卧趺醋?上述的幾種查詢其核心部分<數(shù)據(jù)庫表之間 關(guān)聯(lián)關(guān)系>是沒有發(fā)生變化的,可以認(rèn)為是針對(duì)同一類需求的。由于在QUERY 元數(shù)據(jù)中已經(jīng)把數(shù)據(jù)庫表間的關(guān)聯(lián)關(guān)系等信息都設(shè)置好了 ,運(yùn)行時(shí)通過類似 SetQueryField()的接口 (用于修改查詢字段的接口示例)傳入運(yùn)行期參數(shù),即 可輸出只包含指定查詢字段的SQL語句,從而實(shí)現(xiàn)動(dòng)態(tài)查詢。當(dāng)所需查詢的數(shù)據(jù)庫表(查詢子對(duì)象)僅為 一個(gè)時(shí),則QUERY元數(shù)據(jù)中 所述關(guān)于查詢子對(duì)象的描述,僅僅描述該數(shù)據(jù)庫表即可。而當(dāng)所需查詢的數(shù)據(jù) 庫表(查詢子對(duì)象)為多個(gè)(兩個(gè)或者兩個(gè)以上)時(shí),則所述預(yù)置的元數(shù)據(jù)關(guān) 于查詢子對(duì)象的描述中還可以包括關(guān)于多個(gè)查詢子對(duì)象關(guān)系的描述。而相應(yīng)的,所述調(diào)用參數(shù)接口對(duì)查詢子對(duì)象進(jìn)行修改的內(nèi)容,則還可以包 括修改多個(gè)查詢子對(duì)象的關(guān)系。實(shí)際上,由于數(shù)據(jù)庫表之間的內(nèi)在關(guān)系是由 其存儲(chǔ)的數(shù)據(jù)或者字段自身而決定的,這里所述的修改實(shí)際上就是添加這些已 經(jīng)存在的數(shù)據(jù)庫表關(guān)系而已;但是由于原來的元數(shù)據(jù)中關(guān)于查詢子對(duì)象的描述 中并沒有相應(yīng)關(guān)系的描述,所以稱之為"修改"。從技術(shù)原理上而言,如果能夠動(dòng)態(tài)調(diào)整查詢字段、過濾條件、排序條件以 及查詢指向的數(shù)據(jù)庫表(包括各表之間的關(guān)系),則實(shí)際上,只要設(shè)置一個(gè) QUERY元數(shù)據(jù)就可以滿足各種情況的查詢需求,因?yàn)槿魏尾樵兌伎梢苑纸鉃?上述四項(xiàng)元素的組合。但是,本發(fā)明優(yōu)選的,仍然需要事先預(yù)置多個(gè)QUERY元數(shù)據(jù),以滿足基 本種類的查詢需求。因?yàn)槿绻看尾樵兌夹枰砑訑?shù)據(jù)庫表的關(guān)系,則對(duì)查詢 人員的技術(shù)要求過高,并要求對(duì)底層各個(gè)數(shù)據(jù)庫表的關(guān)系都很清楚,實(shí)際中很 難應(yīng)用。因此,在本發(fā)明的優(yōu)選實(shí)施例中,針對(duì)數(shù)據(jù)庫表的關(guān)系的修改主要是 針對(duì)一些特殊的、非常規(guī)的查詢需求的,目的在于彌補(bǔ)一些特殊情況下無法覆 蓋的查詢需求。在本發(fā)明的另 一優(yōu)選實(shí)施例中,將直接依據(jù)查詢獲取的元數(shù)據(jù)信息而生成 的查詢對(duì)象置于緩存中,并復(fù)制生成一新的查詢對(duì)象實(shí)例返回給調(diào)用者使用。 這樣的技術(shù)改進(jìn),可以保證各個(gè)用戶的每一次查詢?cè)跁?huì)話期間都是隔離的,不 會(huì)相互影響。進(jìn)而,如果當(dāng)前調(diào)用者使用的查詢結(jié)束,則銷毀該用戶使用的查
詢對(duì)象實(shí)例。當(dāng)然,緩存中的原始QUERY對(duì)象則可以繼續(xù)保留,以提供給下 一個(gè)會(huì)話使用。下面以 一個(gè)具體例子對(duì)本發(fā)明進(jìn)行更進(jìn)一步的描述。 例如,在設(shè)計(jì)期,用戶QUERY ;陂定義為元數(shù)據(jù)并保存成XML文件。 QUERY元數(shù)據(jù)中描述了以下主要內(nèi)容Selector 描述SQL語句中的查詢字段。Filter 描述SQL語句中的過濾條件。Order 描述SQL語句中的排序條件。SubObject 描述SQL語句中的子對(duì)象。本發(fā)明的動(dòng)態(tài)QUERY機(jī)制可以設(shè)計(jì)為支持按照面向?qū)ο蟮姆绞絹砉芾?和執(zhí)行查詢,其內(nèi)部按照SQL語法維護(hù)了 Selector、 Filter、 Order及SubObject 等內(nèi)容,其中Selector描述了所有的查詢字段,即最終要輸出的數(shù)據(jù)庫字段列 表;Filter用于描述過濾條件。外部用戶可以在運(yùn)行期通過修改和設(shè)置過濾條 件或者查詢字段來改變SQL查詢的輸出內(nèi)容。本發(fā)明的動(dòng)態(tài)QUERY機(jī)制支持對(duì)若干個(gè)數(shù)據(jù)庫表進(jìn)行關(guān)聯(lián)查詢,其內(nèi)部 定義了 SubObject對(duì)象來描述各個(gè)不同的數(shù)據(jù)庫表,并用一個(gè)SubObjects集合 來管理所有的SubObject子對(duì)象。各個(gè)表之間的關(guān)系用Relation對(duì)象來描述(包 含在SubObject對(duì)象中),每一個(gè)Relation描述了兩個(gè)SubObject間的連接方式 及關(guān)聯(lián)字段等信息。運(yùn)行期外部用戶可以通過修改SubObjects對(duì)象集合及 Relation關(guān)系來動(dòng)態(tài)修改表關(guān)聯(lián)關(guān)系,從而影響查詢輸出記錄內(nèi)容。在實(shí)際使用中, 一次完整的數(shù)據(jù)庫查詢流程通常如下1、 用戶指定要查詢的QUERY,查找相應(yīng)的元數(shù)據(jù)信息;2、 根據(jù)元數(shù)據(jù)信息裝配JAVA內(nèi)存對(duì)象;3、 用戶根據(jù)需求調(diào)用參數(shù)接口,動(dòng)態(tài)修改QUERY的查詢方式;4、 根據(jù)內(nèi)存QUERY對(duì)象生成SQL查詢語句;5、 執(zhí)行SQL數(shù)據(jù)庫查詢,返回?cái)?shù)據(jù)結(jié)果集。當(dāng)外部用戶需要使用動(dòng)態(tài)QUERY進(jìn)行查詢時(shí),首先要調(diào)用系統(tǒng)接口創(chuàng)建
QUERY對(duì)象,系統(tǒng)會(huì)4艮據(jù)QUERY名稱/人系統(tǒng)XML文件中讀入并裝配 QUERY對(duì)象。為保持原始對(duì)象狀態(tài),QUERY引擎將把原始的QUERY對(duì)象 放置到緩存中,并克隆一個(gè)新的QUERY對(duì)象實(shí)例返回給調(diào)用者使用。因此動(dòng) 態(tài)QUERY在每一次查詢會(huì)話期間都是隔離的,不會(huì)相互影響。QUERY創(chuàng)建之后應(yīng)用就可以使用對(duì)象進(jìn)行數(shù)據(jù)庫查詢;此時(shí)該對(duì)象中已 經(jīng)裝配了系統(tǒng)設(shè)計(jì)期定義的各項(xiàng)參數(shù)內(nèi)容,包括預(yù)定義的查詢字段、數(shù)據(jù)庫表 實(shí)體名、表之間的關(guān)聯(lián)關(guān)系、查詢過濾條件等;還可以包括一些其他的運(yùn)行期 內(nèi)存對(duì)象。用戶可以直接使用QUERY進(jìn)行查詢才喿作獲取數(shù)據(jù),也可以動(dòng)態(tài)的 修改QUERY內(nèi)容,按照應(yīng)用的需求進(jìn)行各種新的自定義查詢。主要操作方式 可以為為調(diào)用者創(chuàng)建一個(gè)參數(shù)集合對(duì)象,設(shè)置對(duì)象在其中加入要修改的內(nèi)容, 例如修改Selector改變查詢字段,或修改Filter來改變過濾條件;甚至修改 SubObjects和Relation來修改數(shù)據(jù)表關(guān)系等;該參數(shù)對(duì)象被傳入QUERY對(duì)象 后,將被用于動(dòng)態(tài)改變QUERY內(nèi)部結(jié)構(gòu),按照新的方式進(jìn)行數(shù)據(jù)庫查詢。本次查詢結(jié)束后,則可以釋放QUERY對(duì)象,系統(tǒng)將把用戶使用的對(duì)象實(shí) 例銷毀。但緩存中的原始QUERY對(duì)象將繼續(xù)保留,給下一個(gè)會(huì)話使用。舉例來說,設(shè)有一個(gè)表關(guān)聯(lián)查詢,用戶在不同的環(huán)境下希望有以下幾種 查詢查詢字段A+B,查詢字段A+C,查詢字段A+D,以后還可能會(huì)增加新 的查詢方式。假設(shè)本發(fā)明預(yù)置了一個(gè)查詢字段包括A+B+C+D的QUERY元數(shù)據(jù)(一般 預(yù)置常用的字段即可,不常用的字段可以在運(yùn)行時(shí)期動(dòng)態(tài)添加),由于數(shù)據(jù)查 詢的格式被用內(nèi)存對(duì)象結(jié)構(gòu)的方式來描述,因此可以在運(yùn)行期調(diào)用接口來決定 具體的查詢字段。例如,使用與下面類似的接口方式SetQueryField(A+B)或SetQueryField(A+C) 或SetQueryField(A+D)即可實(shí)現(xiàn)不同方式的查詢;當(dāng)然,還可以使用類似的接口方式 AddNewTable ( TableA, TableB )來動(dòng)態(tài)添加原來沒有的表關(guān)聯(lián)關(guān)系;而這些修改在不同的用戶會(huì)話間是隔 離的。
明在此并不需要加以限定。再例如,通過本發(fā)明的步驟101-104,可以得到如下的SQL語句 Fi OM r一朋一戶酒"ce爿S 'Ti 譜WC五"(9i D五i 萬7 'Ti OKWC五"FiVwwZ^r JSC采用自然語言對(duì)其簡(jiǎn)單說明如下上述SQL語句是一個(gè)針對(duì)省份及其所 屬國家資料的查詢,國家和省份表之間通過FCountryID關(guān)聯(lián)(即SubObject及 其關(guān)聯(lián)關(guān)系),查詢字段為省份ID、省份名稱、省份所屬的國家名稱(即 Selector部分),查詢條件是省^f分表記錄的Fnumber (編號(hào))like , 1,且國家名 稱=,中國,(即Filter部分);排序條件是省份表的編號(hào)(即Order部分)。參照?qǐng)D2,示出了一種數(shù)據(jù)庫動(dòng)態(tài)查詢的裝置實(shí)施例,具體可以包括 元數(shù)據(jù)查找模塊201,用于依據(jù)用戶的指定信息,從預(yù)置的多個(gè)元數(shù)據(jù)中查找相應(yīng)的元數(shù)據(jù);所述元數(shù)據(jù)包括關(guān)于查詢字段的描述、關(guān)于過濾條件的描述、關(guān)于排序條件的描述以及關(guān)于查詢子對(duì)象的描述;查詢對(duì)象生成模塊202,用于依據(jù)所獲取的元數(shù)據(jù)信息,生成查詢對(duì)象; 參數(shù)修改模塊203,用于調(diào)用參數(shù)接口,依據(jù)實(shí)際需求修改查詢字段、過濾條件、排序條件及查詢子對(duì)象四項(xiàng)內(nèi)容中的任一項(xiàng)或者任意組合項(xiàng);SQL查詢語句生成模塊204,用于依據(jù)所述的查詢對(duì)象及其參數(shù)修改信息,生成SQL查詢語句;查詢執(zhí)行才莫塊205,用于執(zhí)行所述SQL查詢語句,完成數(shù)據(jù)庫查詢,返回?cái)?shù)據(jù)結(jié)果集。優(yōu)選的,所述預(yù)置的元it據(jù)關(guān)于查詢子對(duì)象的描述中還包括關(guān)于多個(gè)查 詢子對(duì)象關(guān)系的描述。其中,所述參數(shù)修改模塊對(duì)查詢子對(duì)象進(jìn)行修改的內(nèi)容 還包括修改多個(gè)查詢子對(duì)象的關(guān)系。在本發(fā)明的另一優(yōu)選實(shí)施例中,還可以包括查詢對(duì)象實(shí)例創(chuàng)建才莫塊206, 用于將所述查詢對(duì)象生成模塊得到的查詢對(duì)象置于緩存中,并復(fù)制生成一新的
查詢對(duì)象實(shí)例返回給調(diào)用者使用。進(jìn)而,還可以包括查詢對(duì)象實(shí)例銷毀模塊 207,用于當(dāng)前調(diào)用者使用的查詢結(jié)束后,銷毀該用戶使用的查詢對(duì)象實(shí)例。綜上所述,本發(fā)明可以讓數(shù)據(jù)庫結(jié)構(gòu)實(shí)現(xiàn)邏輯上的可擴(kuò)充性當(dāng)數(shù)據(jù)庫系 統(tǒng)的物理信息(主要指表結(jié)構(gòu)、表數(shù)據(jù))已經(jīng)完成后,如果由于新的業(yè)務(wù)要求 導(dǎo)致表數(shù)據(jù)的不夠,這時(shí)就可以采用QUERY技術(shù)進(jìn)行擴(kuò)充(擴(kuò)充數(shù)據(jù)庫表及 之間的關(guān)系),通過QUERY中強(qiáng)大的SQL來完成此功能。采用本發(fā)明可以筒化數(shù)據(jù)庫系統(tǒng)的內(nèi)部結(jié)構(gòu)及其關(guān)系,因?yàn)槲锢肀砗芏鄷r(shí) 候是以數(shù)據(jù)庫范式原則分析建立的,尤其在數(shù)據(jù)冗余處理方面與實(shí)際業(yè)務(wù)會(huì)產(chǎn) 生較大的分歧,采用QUERY可以將多個(gè)表通過SQL聯(lián)合起來,產(chǎn)生與實(shí)際 業(yè)務(wù)相適應(yīng)的數(shù)據(jù)結(jié)果,這極大方便了軟件開發(fā)及數(shù)據(jù)查詢,因?yàn)槔肣UERY 的SQL寫起來也比較簡(jiǎn)單。需要說明的是,本說明書中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí) 施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似的部 分互相參見即可。對(duì)于裝置類實(shí)施例而言,由于其與方法實(shí)施例基本相似,所 以描述的比較簡(jiǎn)單,相關(guān)之處參見方法實(shí)施例的部分說明即可。以上對(duì)本發(fā)明所提供的 一種數(shù)據(jù)庫動(dòng)態(tài)查詢的方法和裝置,進(jìn)行了詳細(xì)介例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的 一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實(shí)施方式
及應(yīng)用范圍上均會(huì)有改變 之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對(duì)本發(fā)明的限制。
權(quán)利要求
1、 一種數(shù)據(jù)庫動(dòng)態(tài)查詢的方法,其特征在于,包括 依據(jù)用戶的指定信息,從預(yù)置的多個(gè)元數(shù)據(jù)中查找相應(yīng)的元數(shù)據(jù);所述元數(shù)據(jù)包括關(guān)于查詢字段的描述、關(guān)于過濾條件的描述、關(guān)于排序條件的描述以 及關(guān)于查詢子對(duì)象的描述;依據(jù)所獲取的元數(shù)據(jù)信息,生成查詢對(duì)象;調(diào)用參數(shù)接口,依據(jù)實(shí)際需求修改查詢字段、過濾條件、排序條件及查詢 子對(duì)象四項(xiàng)內(nèi)容中的任一項(xiàng)或者任意組合項(xiàng);依據(jù)查詢對(duì)象及其參數(shù)修改信息,生成SQL查詢語句; 執(zhí)行所述SQL查詢語句,完成數(shù)據(jù)庫查詢,返回?cái)?shù)據(jù)結(jié)果集。
2、 如權(quán)利要求1所述的方法,其特征在于,所述預(yù)置的元數(shù)據(jù)關(guān)于查詢 子對(duì)象的描述中還包括關(guān)于多個(gè)查詢子對(duì)象關(guān)系的描述。
3、 如權(quán)利要求2所述的方法,其特征在于,所述調(diào)用參數(shù)接口對(duì)查詢子 對(duì)象進(jìn)行修改的內(nèi)容還包括修改多個(gè)查詢子對(duì)象的關(guān)系。
4、 如權(quán)利要求l所述的方法,其特征在于,還包括 將直接依據(jù)查詢獲取的元數(shù)據(jù)信息而生成的查詢對(duì)象置于緩存中,并復(fù)制生成一新的查詢對(duì)象實(shí)例返回給調(diào)用者使用。
5、 如權(quán)利要求4所述的方法,其特征在于,還包括當(dāng)前調(diào)用者使用的 查詢結(jié)束后,銷毀該用戶使用的查詢對(duì)象實(shí)例。
6、 一種凄t據(jù)庫動(dòng)態(tài)查詢的裝置,其特征在于,包括 元數(shù)據(jù)查找模塊,用于依據(jù)用戶的指定信息,從預(yù)置的多個(gè)元數(shù)據(jù)中查找相應(yīng)的元數(shù)據(jù);所述元數(shù)據(jù)包括關(guān)于查詢字段的描述、關(guān)于過濾條件的描述、關(guān)于排序條件的描述以及關(guān)于查詢子對(duì)象的描述;查詢對(duì)象生成模塊,用于依據(jù)所獲取的元數(shù)據(jù)信息,生成查詢對(duì)象; 參數(shù)修改模塊,用于調(diào)用參數(shù)接口,依據(jù)實(shí)際需求修改查詢字段、過濾條件、排序條件及查詢子對(duì)象四項(xiàng)內(nèi)容中的任一項(xiàng)或者任意組合項(xiàng);SQL查詢語句生成模塊,用于依據(jù)查詢對(duì)象及其參數(shù)修改信息,生成SQL查詢語句;查詢執(zhí)行模塊,用于執(zhí)行所述SQL查詢語句,完成數(shù)據(jù)庫查詢,返回?cái)?shù) 據(jù)結(jié)果集。
7、 如權(quán)利要求6所述的裝置,其特征在于,所述預(yù)置的元數(shù)據(jù)關(guān)于查詢 子對(duì)象的描述中還包括關(guān)于多個(gè)查詢子對(duì)象關(guān)系的描述。
8、 如權(quán)利要求7所述的裝置,其特征在于,所述參數(shù)修改模塊對(duì)查詢子 對(duì)象進(jìn)行修改的內(nèi)容還包括修改多個(gè)查詢子對(duì)象的關(guān)系。
9、 如權(quán)利要求6所述的裝置,其特征在于,還包括 查詢對(duì)象實(shí)例創(chuàng)建^f莫塊,用于將所述查詢對(duì)象生成模塊得到的查詢對(duì)象置于緩存中,并復(fù)制生成一新的查詢對(duì)象實(shí)例返回給調(diào)用者使用。
10、 如權(quán)利要求9所述的裝置,其特征在于,還包括 查詢對(duì)象實(shí)例銷毀模塊,用于當(dāng)前調(diào)用者使用的查詢結(jié)束后,銷毀該用戶使用的查詢對(duì)象實(shí)例。
全文摘要
本發(fā)明提供了一種數(shù)據(jù)庫動(dòng)態(tài)查詢的方法,包括依據(jù)用戶的指定信息,從預(yù)置的多個(gè)元數(shù)據(jù)中查找相應(yīng)的元數(shù)據(jù);所述元數(shù)據(jù)包括關(guān)于查詢字段的描述、關(guān)于過濾條件的描述、關(guān)于排序條件的描述以及關(guān)于查詢子對(duì)象的描述;依據(jù)所獲取的元數(shù)據(jù)信息,生成查詢對(duì)象;調(diào)用參數(shù)接口,依據(jù)實(shí)際需求修改查詢字段、過濾條件、排序條件及查詢子對(duì)象四項(xiàng)內(nèi)容中的任一項(xiàng)或者任意組合項(xiàng);依據(jù)查詢對(duì)象及其參數(shù)修改信息,生成SQL查詢語句;執(zhí)行所述SQL查詢語句,完成數(shù)據(jù)庫查詢,返回?cái)?shù)據(jù)結(jié)果集。本發(fā)明可以通過在運(yùn)行時(shí)傳入過濾參數(shù)等來實(shí)現(xiàn)不同的查詢,能夠滿足紛繁復(fù)雜的查詢需求;并顯著降低應(yīng)用程序維護(hù)的復(fù)雜度,提高查詢機(jī)制的適應(yīng)性和效率。
文檔編號(hào)G06F17/30GK101145162SQ20071016602
公開日2008年3月19日 申請(qǐng)日期2007年10月31日 優(yōu)先權(quán)日2007年10月31日
發(fā)明者俊 張 申請(qǐng)人:金蝶軟件(中國)有限公司