數(shù)據(jù)庫查詢語句的生成方法及裝置制造方法【專利摘要】本發(fā)明公開了一種數(shù)據(jù)庫查詢語句的生成方法及裝置。該數(shù)據(jù)庫查詢語句的生成方法包括:獲取多個(gè)預(yù)設(shè)查詢對(duì)象,其中,多個(gè)預(yù)設(shè)查詢對(duì)象包括根查詢對(duì)象和多個(gè)葉查詢對(duì)象;從多個(gè)葉查詢對(duì)象中獲取目標(biāo)葉查詢對(duì)象;確定查詢列,其中,查詢列用于表示待查詢內(nèi)容對(duì)應(yīng)的列;將查詢列和目標(biāo)葉查詢對(duì)象添加到根查詢對(duì)象中,得到目標(biāo)查詢對(duì)象;根據(jù)目標(biāo)查詢對(duì)象生成目標(biāo)數(shù)據(jù)庫查詢語句。通過本發(fā)明,解決了生成數(shù)據(jù)庫查詢語句時(shí)準(zhǔn)確性差的問題,進(jìn)而通過將查詢列和目標(biāo)葉查詢對(duì)象添加到根查詢對(duì)象中,得到目標(biāo)查詢對(duì)象,再根據(jù)目標(biāo)查詢對(duì)象生成目標(biāo)數(shù)據(jù)庫查詢語句,達(dá)到了提高生成數(shù)據(jù)庫查詢語句的準(zhǔn)確性的效果?!緦@f明】數(shù)據(jù)庫查詢語句的生成方法及裝置【
技術(shù)領(lǐng)域:
】[0001]本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,具體而言,涉及一種數(shù)據(jù)庫查詢語句的生成方法及裝置?!?br>背景技術(shù):
】[0002]在對(duì)關(guān)系數(shù)據(jù)庫進(jìn)行數(shù)據(jù)查詢時(shí),需要利用數(shù)據(jù)庫查詢語句,例如結(jié)構(gòu)化查詢語句(StructuredQueryLanguage,簡(jiǎn)稱為SQL),展開相應(yīng)的數(shù)據(jù)查詢。目前,利用數(shù)據(jù)庫查詢語句進(jìn)行數(shù)據(jù)查詢的方法主要有兩種:一種是靜態(tài)查詢,這類查詢中與查詢條件相關(guān)的數(shù)據(jù)是固定的;另外一種是動(dòng)態(tài)查詢,這類查詢中與查詢條件相關(guān)的數(shù)據(jù)是變化的。靜態(tài)查詢方式可以進(jìn)行預(yù)編譯,然后放至存儲(chǔ)過程或者視圖中。動(dòng)態(tài)查詢則需要根據(jù)用戶需求的不同,指定不同的查詢內(nèi)容。[0003]對(duì)于動(dòng)態(tài)查詢,在執(zhí)行查詢之前需要?jiǎng)討B(tài)構(gòu)造查詢內(nèi)容。現(xiàn)有方法是針對(duì)不同的查詢內(nèi)容,將數(shù)據(jù)庫查詢語句進(jìn)行字符串的拼接,然后再執(zhí)行查詢。該方法對(duì)編程人員來說極不友好,在拼接時(shí)容易出錯(cuò),并且之后的維護(hù)也較難展開。[0004]針對(duì)相關(guān)技術(shù)中生成數(shù)據(jù)庫查詢語句時(shí)準(zhǔn)確性差的問題,目前尚未提出有效的解決方案。【
發(fā)明內(nèi)容】[0005]本發(fā)明的主要目的在于提供一種數(shù)據(jù)庫查詢語句的生成方法及裝置,以解決生成數(shù)據(jù)庫查詢語句時(shí)準(zhǔn)確性差的問題。[0006]為了實(shí)現(xiàn)上述目的,根據(jù)本發(fā)明的一個(gè)方面,提供了一種數(shù)據(jù)庫查詢語句的生成方法。[0007]根據(jù)本發(fā)明的數(shù)據(jù)庫查詢語句的生成方法包括:獲取多個(gè)預(yù)設(shè)查詢對(duì)象,其中,多個(gè)預(yù)設(shè)查詢對(duì)象包括根查詢對(duì)象和多個(gè)葉查詢對(duì)象;從多個(gè)葉查詢對(duì)象中獲取目標(biāo)葉查詢對(duì)象;確定查詢列,其中,查詢列用于表示待查詢內(nèi)容對(duì)應(yīng)的列;將查詢列和目標(biāo)葉查詢對(duì)象添加到根查詢對(duì)象中,得到目標(biāo)查詢對(duì)象;根據(jù)目標(biāo)查詢對(duì)象生成目標(biāo)數(shù)據(jù)庫查詢語句。[0008]進(jìn)一步地,將查詢列和目標(biāo)葉查詢對(duì)象添加到根查詢對(duì)象中,得到目標(biāo)查詢對(duì)象包括:獲取預(yù)設(shè)查詢代碼,其中,預(yù)設(shè)查詢代碼為表示查詢條件的代碼;將查詢列、預(yù)設(shè)查詢代碼和目標(biāo)葉查詢對(duì)象添加到根查詢對(duì)象中,得到目標(biāo)查詢對(duì)象。[0009]進(jìn)一步地,獲取多個(gè)預(yù)設(shè)查詢對(duì)象包括:獲取預(yù)設(shè)數(shù)據(jù)庫查詢語句;將預(yù)設(shè)數(shù)據(jù)庫查詢語句按照預(yù)設(shè)規(guī)則進(jìn)行拆分,獲取多個(gè)拆分結(jié)果;將多個(gè)拆分結(jié)果分別作為多個(gè)預(yù)設(shè)查詢對(duì)象。[0010]進(jìn)一步地,將預(yù)設(shè)數(shù)據(jù)庫查詢語句按照預(yù)設(shè)規(guī)則進(jìn)行拆分包括:確定預(yù)設(shè)數(shù)據(jù)庫查詢語句的語句結(jié)構(gòu);按照語句結(jié)構(gòu),劃分出預(yù)設(shè)數(shù)據(jù)庫查詢語句的根節(jié)點(diǎn)和葉節(jié)點(diǎn);按照預(yù)設(shè)數(shù)據(jù)庫查詢語句的根節(jié)點(diǎn)和葉節(jié)點(diǎn)對(duì)預(yù)設(shè)數(shù)據(jù)庫查詢語句進(jìn)行拆分。[0011]進(jìn)一步地,按照語句結(jié)構(gòu),劃分出預(yù)設(shè)數(shù)據(jù)庫查詢語句的根節(jié)點(diǎn)和葉節(jié)點(diǎn)包括:將預(yù)設(shè)數(shù)據(jù)庫查詢語句中包含的物理表、聯(lián)接表、邏輯表和子查詢表作為預(yù)設(shè)數(shù)據(jù)庫查詢語句的葉節(jié)點(diǎn);將預(yù)設(shè)數(shù)據(jù)庫查詢語句中的查詢實(shí)體作為預(yù)設(shè)數(shù)據(jù)庫查詢語句的根節(jié)點(diǎn)。[0012]進(jìn)一步地,多個(gè)葉查詢對(duì)象用于嵌套在根查詢對(duì)象中,根據(jù)目標(biāo)查詢對(duì)象生成目標(biāo)數(shù)據(jù)庫查詢語句包括:獲取根查詢對(duì)象和目標(biāo)葉查詢對(duì)象的預(yù)設(shè)嵌套關(guān)系,其中,嵌套在內(nèi)部的查詢對(duì)象先于嵌套在外部的查詢對(duì)象生成目標(biāo)數(shù)據(jù)庫查詢語句;根據(jù)預(yù)設(shè)嵌套關(guān)系和目標(biāo)查詢對(duì)象生成數(shù)據(jù)庫查詢語句。[0013]為了實(shí)現(xiàn)上述目的,根據(jù)本發(fā)明的另一方面,提供了一種數(shù)據(jù)庫查詢語句的生成目.ο[0014]根據(jù)本發(fā)明的數(shù)據(jù)庫查詢語句的生成裝置包括:第一獲取單元,用于獲取多個(gè)預(yù)設(shè)查詢對(duì)象,其中,多個(gè)預(yù)設(shè)查詢對(duì)象包括根查詢對(duì)象和多個(gè)葉查詢對(duì)象;第二獲取單元,用于從多個(gè)葉查詢對(duì)象中獲取目標(biāo)葉查詢對(duì)象;確定單元,用于確定查詢列,其中,查詢列用于表示待查詢內(nèi)容對(duì)應(yīng)的列;添加單元,用于將查詢列和目標(biāo)葉查詢對(duì)象添加到根查詢對(duì)象中,得到目標(biāo)查詢對(duì)象;生成單元,用于根據(jù)目標(biāo)查詢對(duì)象生成目標(biāo)數(shù)據(jù)庫查詢語句。[0015]進(jìn)一步地,添加單元包括:第一獲取模塊,用于獲取預(yù)設(shè)查詢代碼,其中,預(yù)設(shè)查詢代碼為表示查詢條件的代碼;添加模塊,用于將查詢列、預(yù)設(shè)查詢代碼和目標(biāo)葉查詢對(duì)象添加到根查詢對(duì)象中,得到目標(biāo)查詢對(duì)象。[0016]進(jìn)一步地,第一獲取單元包括:第二獲取模塊,用于獲取預(yù)設(shè)數(shù)據(jù)庫查詢語句;拆分模塊,用于將預(yù)設(shè)數(shù)據(jù)庫查詢語句按照預(yù)設(shè)規(guī)則進(jìn)行拆分,獲取多個(gè)拆分結(jié)果;確定模塊,用于將多個(gè)拆分結(jié)果分別作為多個(gè)預(yù)設(shè)查詢對(duì)象。[0017]進(jìn)一步地,拆分模塊包括:確定子模塊,用于確定預(yù)設(shè)數(shù)據(jù)庫查詢語句的語句結(jié)構(gòu);劃分子模塊,用于按照語句結(jié)構(gòu),劃分出預(yù)設(shè)數(shù)據(jù)庫查詢語句的根節(jié)點(diǎn)和葉節(jié)點(diǎn);拆分子模塊,用于按照預(yù)設(shè)數(shù)據(jù)庫查詢語句的根節(jié)點(diǎn)和葉節(jié)點(diǎn)對(duì)預(yù)設(shè)數(shù)據(jù)庫查詢語句進(jìn)行拆分。[0018]通過本發(fā)明,采用包括以下步驟的方法:獲取多個(gè)預(yù)設(shè)查詢對(duì)象,其中,多個(gè)預(yù)設(shè)查詢對(duì)象包括根查詢對(duì)象和多個(gè)葉查詢對(duì)象;從多個(gè)葉查詢對(duì)象中獲取目標(biāo)葉查詢對(duì)象;確定查詢列,其中,查詢列用于表示待查詢內(nèi)容對(duì)應(yīng)的列;將查詢列和目標(biāo)葉查詢對(duì)象添加到根查詢對(duì)象中,得到目標(biāo)查詢對(duì)象;根據(jù)目標(biāo)查詢對(duì)象生成目標(biāo)數(shù)據(jù)庫查詢語句,解決了生成數(shù)據(jù)庫查詢語句時(shí)準(zhǔn)確性差的問題,進(jìn)而通過將查詢列和目標(biāo)葉查詢對(duì)象添加到根查詢對(duì)象中,得到目標(biāo)查詢對(duì)象,再根據(jù)目標(biāo)查詢對(duì)象生成目標(biāo)數(shù)據(jù)庫查詢語句,達(dá)到了提高生成數(shù)據(jù)庫查詢語句的準(zhǔn)確性的效果?!緦@綀D】【附圖說明】[0019]構(gòu)成本申請(qǐng)的一部分的附圖用來提供對(duì)本發(fā)明的進(jìn)一步理解,本發(fā)明的示意性實(shí)施例及其說明用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。在附圖中:[0020]圖1是根據(jù)本發(fā)明的數(shù)據(jù)庫查詢語句的生成方法的實(shí)施例的流程圖;[0021]圖2是根據(jù)本發(fā)明的數(shù)據(jù)庫查詢語句的生成方法的實(shí)施例的第一樹形語句結(jié)構(gòu)示意圖;[0022]圖3是根據(jù)本發(fā)明的數(shù)據(jù)庫查詢語句的生成方法的實(shí)施例的第二樹形語句結(jié)構(gòu)示意圖;[0023]圖4是根據(jù)本發(fā)明的數(shù)據(jù)庫查詢語句的生成方法的實(shí)施例的第三樹形語句結(jié)構(gòu)不意圖;以及[0024]圖5是根據(jù)本發(fā)明的數(shù)據(jù)庫查詢語句的生成裝置的實(shí)施例的示意圖?!揪唧w實(shí)施方式】[0025]需要說明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相互組合。下面將參考附圖并結(jié)合實(shí)施例來詳細(xì)說明本發(fā)明。[0026]為了使本【
技術(shù)領(lǐng)域:
】的人員更好地理解本申請(qǐng)方案,下面將結(jié)合本申請(qǐng)實(shí)施例中的附圖,對(duì)本申請(qǐng)實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本申請(qǐng)一部分的實(shí)施例,而不是全部的實(shí)施例?;诒旧暾?qǐng)中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都應(yīng)當(dāng)屬于本申請(qǐng)保護(hù)的范圍。[0027]需要說明的是,本申請(qǐng)的說明書和權(quán)利要求書及上述附圖中的術(shù)語“第一”、“第二”等是用于區(qū)別類似的對(duì)象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的本申請(qǐng)的實(shí)施例。此外,術(shù)語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或?qū)τ谶@些過程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。[0028]根據(jù)本發(fā)明的實(shí)施例,提供了一種數(shù)據(jù)庫查詢語句的生成方法。[0029]圖1是根據(jù)本發(fā)明的數(shù)據(jù)庫查詢語句的生成方法的實(shí)施例的流程圖。如圖1所示,該方法包括步驟S102至步驟SllO:[0030]步驟S102,獲取多個(gè)預(yù)設(shè)查詢對(duì)象,其中,多個(gè)預(yù)設(shè)查詢對(duì)象包括根查詢對(duì)象和多個(gè)葉查詢對(duì)象。[0031]多個(gè)預(yù)設(shè)查詢對(duì)象包括根查詢對(duì)象和多個(gè)葉查詢對(duì)象。根查詢對(duì)象是生成的數(shù)據(jù)庫查詢語句的最上層的查詢實(shí)體,例如,SELECT…FROM…。葉查詢對(duì)象是可以添加入根查詢對(duì)象中的查詢實(shí)體。葉查詢對(duì)象包括表,例如物理表(PhysicalTableExpress1nJl]tableA)、邏輯表(LogicalTableExpress1n),如(SELECTaFROMtabIeA)AST)、子查詢表、聯(lián)接表(JoinTableExpress1n,包含兩個(gè)聯(lián)接表和一個(gè)聯(lián)接條件)等。[0032]可以通過如下方法獲取多個(gè)預(yù)設(shè)查詢對(duì)象包括:獲取預(yù)設(shè)數(shù)據(jù)庫查詢語句;將預(yù)設(shè)數(shù)據(jù)庫查詢語句按照預(yù)設(shè)規(guī)則進(jìn)行拆分,獲取多個(gè)拆分結(jié)果;將多個(gè)拆分結(jié)果分別作為多個(gè)預(yù)設(shè)查詢對(duì)象。[0033]預(yù)設(shè)數(shù)據(jù)庫查詢語句中幾乎涵蓋了常用的全部查詢對(duì)象,因此,只需要將現(xiàn)有的預(yù)設(shè)數(shù)據(jù)庫查詢語句進(jìn)行拆分,將拆分之后獲取到的結(jié)果作為預(yù)設(shè)查詢對(duì)象。例如,預(yù)設(shè)數(shù)據(jù)庫查詢語句中包含語句SELECTaFROM(SELECTaFROMBINNERJOINCONB.1D=C.1D)AST,因此,可以將該語句進(jìn)行拆分,包括!SELECT…FROM…;INNERJOIN;B;C。當(dāng)之后需要獲取預(yù)設(shè)查詢對(duì)象時(shí),可以參考上述拆分之后的查詢對(duì)象,如果和待查詢的內(nèi)容相關(guān)的話即可以直接調(diào)用。[0034]可以通過如下步驟將預(yù)設(shè)數(shù)據(jù)庫查詢語句按照預(yù)設(shè)規(guī)則進(jìn)行拆分包括:確定預(yù)設(shè)數(shù)據(jù)庫查詢語句的語句結(jié)構(gòu);按照語句結(jié)構(gòu),劃分出預(yù)設(shè)數(shù)據(jù)庫查詢語句的根節(jié)點(diǎn)和葉節(jié)點(diǎn);按照預(yù)設(shè)數(shù)據(jù)庫查詢語句的根節(jié)點(diǎn)和葉節(jié)點(diǎn)對(duì)預(yù)設(shè)數(shù)據(jù)庫查詢語句進(jìn)行拆分。[0035]可以根據(jù)如下方法,按照語句結(jié)構(gòu),劃分出預(yù)設(shè)數(shù)據(jù)庫查詢語句的根節(jié)點(diǎn)和葉節(jié)點(diǎn)包括:將預(yù)設(shè)數(shù)據(jù)庫查詢語句中包含的物理表、聯(lián)接表、邏輯表和子查詢表作為預(yù)設(shè)數(shù)據(jù)庫查詢語句的葉節(jié)點(diǎn);將預(yù)設(shè)數(shù)據(jù)庫查詢語句中的查詢實(shí)體作為預(yù)設(shè)數(shù)據(jù)庫查詢語句的根節(jié)點(diǎn)。[0036]根據(jù)預(yù)設(shè)數(shù)據(jù)庫查詢語句的語句結(jié)構(gòu),可以將預(yù)設(shè)數(shù)據(jù)庫查詢語句進(jìn)行合理的拆分,并且對(duì)于后續(xù)準(zhǔn)確完整地調(diào)用查詢對(duì)象十分有利。下面將以圖2、圖3、圖4為例進(jìn)行具體的說明。[0037]圖2是根據(jù)本發(fā)明的數(shù)據(jù)庫查詢語句的生成方法的實(shí)施例的第一樹形語句結(jié)構(gòu)示意圖。預(yù)設(shè)數(shù)據(jù)庫查詢語句為SELECTaFROMtableA。如圖2所示,該語句可以描述為:從表(tableA)中取某些列(a)的數(shù)據(jù)??梢詫⒋苏Z句中的表看作是一個(gè)樹的節(jié)點(diǎn),整體看作是樹的根節(jié)點(diǎn),從而該語句的執(zhí)行結(jié)果就可以描述為根節(jié)點(diǎn)。[0038]圖3是根據(jù)本發(fā)明的數(shù)據(jù)庫查詢語句的生成方法的實(shí)施例的第二樹形語句結(jié)構(gòu)示意圖。圖中的預(yù)設(shè)數(shù)據(jù)庫查詢語句為SELECTaFROM(SELECTaFROMtableA)Tc該語句中,有一個(gè)嵌套子查詢,外層查詢從子查詢中查詢出來結(jié)果。如圖3所示,該語句可以描述為:從表(tableA)中獲取某些列(a)的數(shù)據(jù),再將上述結(jié)果作為一個(gè)表(SELECTaFROMtableA),從該表中獲取某些列(a)的數(shù)據(jù)。可以將此語句中的表看作是一個(gè)樹的節(jié)點(diǎn),tableA,SELECTaFROMtableA是該樹形結(jié)構(gòu)的兩個(gè)節(jié)點(diǎn),tableA是葉節(jié)點(diǎn)、SELECTaFROMtableA為父節(jié)點(diǎn)。該語句的最終結(jié)果(即整個(gè)完整的查詢語句)為根節(jié)點(diǎn)。[0039]圖4是根據(jù)本發(fā)明的數(shù)據(jù)庫查詢語句的生成方法的實(shí)施例的第三樹形語句結(jié)構(gòu)示意圖。圖中的預(yù)設(shè)數(shù)據(jù)庫查詢語句為SELECTaFROM(SELECTaFROMBINNERJOINCONB.1D=C.1D)T。該語句中,有兩個(gè)嵌套子查詢,第一子查詢語句從第二子查詢語句中查詢出結(jié)果,最外層查詢從第一子查詢語句中查詢出結(jié)果。該語句可以描述為:首先建立表B和表C的關(guān)系表,從表(BINNERJOINC)中獲取某些列(a)的數(shù)據(jù),再?gòu)腟ELECTaFROMBINNERJOINC中獲取某些列(a)的數(shù)據(jù)。可以將此語句中的表看作是一個(gè)樹的節(jié)點(diǎn),B、C是該樹形結(jié)構(gòu)位于最底層的兩個(gè)葉節(jié)點(diǎn),BINNERJOINC為位于B、C之上的父節(jié)點(diǎn),SELECTaFROMBINNERJOINC為位于BINNERJOINC之上的父節(jié)點(diǎn)。該語句的最終結(jié)果(即整個(gè)完整的查詢語句)為根節(jié)點(diǎn)。[0040]通過上述幾個(gè)示例可以說明,預(yù)設(shè)數(shù)據(jù)庫查詢語句可以按照上述樹的形式進(jìn)行拆分,每一個(gè)節(jié)點(diǎn),代表著一個(gè)表,該表可能是物理表,也可能是臨時(shí)表、子查詢等等,而最終的結(jié)果為該樹形結(jié)構(gòu)的根節(jié)點(diǎn)。[0041]步驟S104,從多個(gè)葉查詢對(duì)象中獲取目標(biāo)葉查詢對(duì)象。[0042]數(shù)據(jù)庫中已經(jīng)事先存儲(chǔ)了多個(gè)葉查詢對(duì)象,根據(jù)查詢的需求,可以在多個(gè)葉查詢對(duì)象中進(jìn)行查找,獲取目標(biāo)葉查詢對(duì)象,從而可以直接將獲取的目標(biāo)葉查詢對(duì)象拼裝在根查詢對(duì)象中,這種實(shí)現(xiàn)方法簡(jiǎn)便易行,并且保證了拼接的準(zhǔn)確性。例如,如果查詢需要獲取表B和表C的聯(lián)接表,則可以直接在多個(gè)葉查詢對(duì)象中查找,從而可以獲取TableBINNERJoinTableC0[0043]步驟S106,確定查詢列,其中,查詢列用于表示待查詢內(nèi)容對(duì)應(yīng)的列。[0044]查詢列表示待查詢內(nèi)容對(duì)應(yīng)的列,是用于指定查詢的具體內(nèi)容。例如,查詢物理表A的第a列,則可以設(shè)定查詢列為a。[0045]步驟S108,將查詢列和目標(biāo)葉查詢對(duì)象添加到根查詢對(duì)象中,得到目標(biāo)查詢對(duì)象。[0046]在一個(gè)查詢過程中,需要確定實(shí)現(xiàn)查詢需要利用的查詢對(duì)象,包括物理表、邏輯表、子查詢表、聯(lián)接表等,同時(shí),也需要指定查詢上述表中的具體的內(nèi)容。因此,可以將查詢列和目標(biāo)葉查詢對(duì)象添加到根查詢對(duì)象中,則根查詢對(duì)象便具備了可以查詢出預(yù)期結(jié)果的條件。[0047]可選地,將查詢列和目標(biāo)葉查詢對(duì)象添加到根查詢對(duì)象中,得到目標(biāo)查詢對(duì)象還可以包括:獲取預(yù)設(shè)查詢代碼,其中,預(yù)設(shè)查詢代碼為表示查詢條件的代碼;將查詢列、預(yù)設(shè)查詢代碼和目標(biāo)葉查詢對(duì)象添加到根查詢對(duì)象中,得到目標(biāo)查詢對(duì)象。[0048]由于在對(duì)數(shù)據(jù)庫進(jìn)行查詢的過程中,往往需要查詢特定條件下的數(shù)據(jù),例如,獲取某一個(gè)年級(jí)排名在前10名的同學(xué)的家庭住址。因此,需要在根查詢對(duì)象中添加入查詢條件代碼。例如,可以加入過濾條件、分組列、排序規(guī)則等查詢條件。[0049]步驟SI10,根據(jù)目標(biāo)查詢對(duì)象生成目標(biāo)數(shù)據(jù)庫查詢語句。[0050]可選地,多個(gè)葉查詢對(duì)象用于嵌套在根查詢對(duì)象中,根據(jù)目標(biāo)查詢對(duì)象生成目標(biāo)數(shù)據(jù)庫查詢語句包括:獲取根查詢對(duì)象和目標(biāo)葉查詢對(duì)象的預(yù)設(shè)嵌套關(guān)系,其中,嵌套在內(nèi)部的查詢對(duì)象先于嵌套在外部的查詢對(duì)象生成目標(biāo)數(shù)據(jù)庫查詢語句;根據(jù)預(yù)設(shè)嵌套關(guān)系和目標(biāo)查詢對(duì)象生成數(shù)據(jù)庫查詢語句。[0051]經(jīng)過上面的一系列轉(zhuǎn)化,最終的結(jié)果只會(huì)有一個(gè)查詢塊。該查詢塊在最終生成SQL語句時(shí),只需從上到下把每一部分都生成為對(duì)應(yīng)的數(shù)據(jù)庫查詢語句即可(遞歸生成),其生成的過程在查詢塊中自動(dòng)完成,不需要開發(fā)者手動(dòng)進(jìn)行,開發(fā)者只要指定查詢的列、排序列等信息即可,操作十分簡(jiǎn)易。[0052]例如,獲取的根查詢對(duì)象為SELECTaFROM1gicTb;獲取的葉查詢對(duì)象為SELECTaFROMjoinTb,命名為logicTb,BINNERJOINCONB.1D=C.1D,命名為joinTb,物理表B和C。在生成目標(biāo)數(shù)據(jù)庫查詢語句時(shí),從上到下把每一部分都生成為對(duì)應(yīng)的數(shù)據(jù)庫查詢語句即可。最終自動(dòng)生成的目標(biāo)數(shù)據(jù)庫查詢語句為SELECTaFROM(SELECTaFROMBINNERJOINCONB.1D=C.1D)AST0[0053]從上面的分析可以看出來,本方法首先將預(yù)設(shè)數(shù)據(jù)庫查詢語句進(jìn)行了拆解,分解出數(shù)據(jù)庫查詢語句的構(gòu)成后,再將每一部分的構(gòu)成表示為一個(gè)對(duì)象的結(jié)構(gòu)。開發(fā)人員在進(jìn)行查詢語句開發(fā)時(shí),只需要維護(hù)上述查詢對(duì)象,即可高效地實(shí)現(xiàn)對(duì)一個(gè)數(shù)據(jù)庫查詢語句的拼接。這種方法能夠以對(duì)象的方式對(duì)數(shù)據(jù)庫查詢語句進(jìn)行管理,使得數(shù)據(jù)庫查詢語句在程序中實(shí)現(xiàn)了本土化,程序可以使用對(duì)象的方式控制數(shù)據(jù)庫查詢語句,這種方法可以在很大程度上減少拼接出錯(cuò)的幾率,對(duì)于數(shù)據(jù)庫查詢語句的后期維護(hù)十分有利。[0054]該實(shí)施例由于采用了如下步驟:獲取多個(gè)預(yù)設(shè)查詢對(duì)象,其中,多個(gè)預(yù)設(shè)查詢對(duì)象包括根查詢對(duì)象和多個(gè)葉查詢對(duì)象;從多個(gè)葉查詢對(duì)象中獲取目標(biāo)葉查詢對(duì)象;確定查詢列,其中,查詢列用于表示待查詢內(nèi)容對(duì)應(yīng)的列;將查詢列和目標(biāo)葉查詢對(duì)象添加到根查詢對(duì)象中,得到目標(biāo)查詢對(duì)象;根據(jù)目標(biāo)查詢對(duì)象生成目標(biāo)數(shù)據(jù)庫查詢語句,解決了生成數(shù)據(jù)庫查詢語句時(shí)準(zhǔn)確性差的問題,進(jìn)而通過將查詢列和目標(biāo)葉查詢對(duì)象添加到根查詢對(duì)象中,得到目標(biāo)查詢對(duì)象,再根據(jù)目標(biāo)查詢對(duì)象生成目標(biāo)數(shù)據(jù)庫查詢語句,達(dá)到了提高生成數(shù)據(jù)庫查詢語句的準(zhǔn)確性的效果。[0055]根據(jù)本發(fā)明的實(shí)施例,提供了一種數(shù)據(jù)庫查詢語句的生成裝置。需要說明的是,本發(fā)明實(shí)施例的數(shù)據(jù)庫查詢語句的生成裝置可以用于執(zhí)行本發(fā)明實(shí)施例所提供的數(shù)據(jù)庫查詢語句的生成方法,本發(fā)明實(shí)施例的數(shù)據(jù)庫查詢語句的生成方法也可以通過本發(fā)明實(shí)施例所提供的數(shù)據(jù)庫查詢語句的生成裝置來執(zhí)行。[0056]圖5是根據(jù)本發(fā)明的數(shù)據(jù)庫查詢語句的生成裝置的實(shí)施例的示意圖。如圖5所示,該裝置包括:第一獲取單元10、第二獲取單元20、確定單元30、添加單元40和生成單元50。[0057]第一獲取單元10,用于獲取多個(gè)預(yù)設(shè)查詢對(duì)象,其中,多個(gè)預(yù)設(shè)查詢對(duì)象包括根查詢對(duì)象和多個(gè)葉查詢對(duì)象。[0058]可選地,第一獲取單元10還可以包括:第二獲取模塊,用于獲取預(yù)設(shè)數(shù)據(jù)庫查詢語句;拆分模塊,用于將預(yù)設(shè)數(shù)據(jù)庫查詢語句按照預(yù)設(shè)規(guī)則進(jìn)行拆分,獲取多個(gè)拆分結(jié)果;確定模塊,用于將多個(gè)拆分結(jié)果分別作為多個(gè)預(yù)設(shè)查詢對(duì)象。[0059]拆分模塊包括:確定子模塊,用于確定預(yù)設(shè)數(shù)據(jù)庫查詢語句的語句結(jié)構(gòu);劃分子模塊,用于按照語句結(jié)構(gòu),劃分出預(yù)設(shè)數(shù)據(jù)庫查詢語句的根節(jié)點(diǎn)和葉節(jié)點(diǎn);拆分子模塊,用于按照預(yù)設(shè)數(shù)據(jù)庫查詢語句的根節(jié)點(diǎn)和葉節(jié)點(diǎn)對(duì)預(yù)設(shè)數(shù)據(jù)庫查詢語句進(jìn)行拆分。[0060]第二獲取單元20,用于從多個(gè)葉查詢對(duì)象中獲取目標(biāo)葉查詢對(duì)。[0061]確定單元30,用于確定查詢列,其中,查詢列用于表示待查詢內(nèi)容對(duì)應(yīng)的列。[0062]添加單元40,用于將查詢列和目標(biāo)葉查詢對(duì)象添加到根查詢對(duì)象中,得到目標(biāo)查詢對(duì)象。[0063]可選地,添加單元40還可以包括:第一獲取模塊,用于獲取預(yù)設(shè)查詢代碼,其中,預(yù)設(shè)查詢代碼為表示查詢條件的代碼;添加模塊,用于將查詢列、預(yù)設(shè)查詢代碼和目標(biāo)葉查詢對(duì)象添加到根查詢對(duì)象中,得到目標(biāo)查詢對(duì)象。[0064]生成單元50,用于根據(jù)目標(biāo)查詢對(duì)象生成目標(biāo)數(shù)據(jù)庫查詢語句。[0065]本實(shí)施例提供的數(shù)據(jù)庫查詢語句的生成裝置包括:第一獲取單元10、第二獲取單元20、確定單元30、添加單元40和生成單元50。通過該裝置,解決了生成數(shù)據(jù)庫查詢語句時(shí)準(zhǔn)確性差的問題,進(jìn)而利用添加單元40將查詢列和目標(biāo)葉查詢對(duì)象添加到根查詢對(duì)象中,得到目標(biāo)查詢對(duì)象,再利用生成單元50根據(jù)目標(biāo)查詢對(duì)象生成目標(biāo)數(shù)據(jù)庫查詢語句,達(dá)到了提高生成數(shù)據(jù)庫查詢語句的準(zhǔn)確性的效果。[0066]上述本發(fā)明實(shí)施例序號(hào)僅僅為了描述,不代表實(shí)施例的優(yōu)劣。[0067]在本發(fā)明的上述實(shí)施例中,對(duì)各個(gè)實(shí)施例的描述都各有側(cè)重,某個(gè)實(shí)施例中沒有詳述的部分,可以參見其他實(shí)施例的相關(guān)描述。[0068]在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的客戶端,可通過其它的方式實(shí)現(xiàn)。其中,以上所描述的裝置實(shí)施例僅僅是示意性的,例如所述單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,單元或模塊的間接耦合或通信連接,可以是電性或其它的形式。[0069]所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來實(shí)現(xiàn)本實(shí)施例方案的目的。[0070]另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。[0071]所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(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ì)包括:U盤、只讀存儲(chǔ)器(ROM,Read-OnlyMemory)、隨機(jī)存取存儲(chǔ)器(RAM,RandomAccessMemory)、移動(dòng)硬盤、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。[0072]以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本【
技術(shù)領(lǐng)域:
】的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍?!緳?quán)利要求】1.一種數(shù)據(jù)庫查詢語句的生成方法,其特征在于,包括:獲取多個(gè)預(yù)設(shè)查詢對(duì)象,其中,所述多個(gè)預(yù)設(shè)查詢對(duì)象包括根查詢對(duì)象和多個(gè)葉查詢對(duì)象;從所述多個(gè)葉查詢對(duì)象中獲取目標(biāo)葉查詢對(duì)象;確定查詢列,其中,所述查詢列用于表示待查詢內(nèi)容對(duì)應(yīng)的列;將所述查詢列和所述目標(biāo)葉查詢對(duì)象添加到所述根查詢對(duì)象中,得到目標(biāo)查詢對(duì)象;以及根據(jù)所述目標(biāo)查詢對(duì)象生成目標(biāo)數(shù)據(jù)庫查詢語句。2.根據(jù)權(quán)利要求1所述的方法,其特征在于,將所述查詢列和所述目標(biāo)葉查詢對(duì)象添加到所述根查詢對(duì)象中,得到目標(biāo)查詢對(duì)象包括:獲取所述預(yù)設(shè)查詢代碼,其中,所述預(yù)設(shè)查詢代碼為表示查詢條件的代碼;以及將所述查詢列、所述預(yù)設(shè)查詢代碼和所述目標(biāo)葉查詢對(duì)象添加到所述根查詢對(duì)象中,得到所述目標(biāo)查詢對(duì)象。3.根據(jù)權(quán)利要求1所述的方法,其特征在于,獲取多個(gè)預(yù)設(shè)查詢對(duì)象包括:獲取預(yù)設(shè)數(shù)據(jù)庫查詢語句;將所述預(yù)設(shè)數(shù)據(jù)庫查詢語句按照預(yù)設(shè)規(guī)則進(jìn)行拆分,獲取多個(gè)拆分結(jié)果;以及將所述多個(gè)拆分結(jié)果分別作為所述多個(gè)預(yù)設(shè)查詢對(duì)象。4.根據(jù)權(quán)利要求3所述的方法,其特征在于,將所述預(yù)設(shè)數(shù)據(jù)庫查詢語句按照預(yù)設(shè)規(guī)則進(jìn)行拆分包括:確定所述預(yù)設(shè)數(shù)據(jù)庫查詢語句的語句結(jié)構(gòu);按照所述語句結(jié)構(gòu),劃分出所述預(yù)設(shè)數(shù)據(jù)庫查詢語句的根節(jié)點(diǎn)和葉節(jié)點(diǎn);以及按照所述預(yù)設(shè)數(shù)據(jù)庫查詢語句的根節(jié)點(diǎn)和所述葉節(jié)點(diǎn)對(duì)所述預(yù)設(shè)數(shù)據(jù)庫查詢語句進(jìn)行拆分。5.根據(jù)權(quán)利要求4所述的方法,其特征在于,按照所述語句結(jié)構(gòu),劃分出所述預(yù)設(shè)數(shù)據(jù)庫查詢語句的根節(jié)點(diǎn)和葉節(jié)點(diǎn)包括:將所述預(yù)設(shè)數(shù)據(jù)庫查詢語句中包含的物理表、聯(lián)接表、邏輯表和子查詢表作為所述預(yù)設(shè)數(shù)據(jù)庫查詢語句的葉節(jié)點(diǎn);以及將所述預(yù)設(shè)數(shù)據(jù)庫查詢語句中的查詢實(shí)體作為所述預(yù)設(shè)數(shù)據(jù)庫查詢語句的根節(jié)點(diǎn)。6.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述多個(gè)葉查詢對(duì)象用于嵌套在所述根查詢對(duì)象中,根據(jù)所述目標(biāo)查詢對(duì)象生成目標(biāo)數(shù)據(jù)庫查詢語句包括:獲取所述根查詢對(duì)象和所述目標(biāo)葉查詢對(duì)象的預(yù)設(shè)嵌套關(guān)系,其中,嵌套在內(nèi)部的查詢對(duì)象先于嵌套在外部的查詢對(duì)象生成目標(biāo)數(shù)據(jù)庫查詢語句;以及根據(jù)所述預(yù)設(shè)嵌套關(guān)系和所述目標(biāo)查詢對(duì)象生成數(shù)據(jù)庫查詢語句。7.一種數(shù)據(jù)庫查詢語句的生成裝置,其特征在于,包括:第一獲取單元,用于獲取多個(gè)預(yù)設(shè)查詢對(duì)象,其中,所述多個(gè)預(yù)設(shè)查詢對(duì)象包括根查詢對(duì)象和多個(gè)葉查詢對(duì)象;第二獲取單元,用于從所述多個(gè)葉查詢對(duì)象中獲取目標(biāo)葉查詢對(duì)象;確定單元,用于確定查詢列,其中,所述查詢列用于表示待查詢內(nèi)容對(duì)應(yīng)的列;添加單元,用于將所述查詢列和所述目標(biāo)葉查詢對(duì)象添加到所述根查詢對(duì)象中,得到目標(biāo)查詢對(duì)象;以及生成單元,用于根據(jù)所述目標(biāo)查詢對(duì)象生成目標(biāo)數(shù)據(jù)庫查詢語句。8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述添加單元包括:第一獲取模塊,用于獲取所述預(yù)設(shè)查詢代碼,其中,所述預(yù)設(shè)查詢代碼為表示查詢條件的代碼;以及添加模塊,用于將所述查詢列、所述預(yù)設(shè)查詢代碼和所述目標(biāo)葉查詢對(duì)象添加到所述根查詢對(duì)象中,得到所述目標(biāo)查詢對(duì)象。9.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述第一獲取單元包括:第二獲取模塊,用于獲取預(yù)設(shè)數(shù)據(jù)庫查詢語句;拆分模塊,用于將所述預(yù)設(shè)數(shù)據(jù)庫查詢語句按照預(yù)設(shè)規(guī)則進(jìn)行拆分,獲取多個(gè)拆分結(jié)果;以及確定模塊,用于將所述多個(gè)拆分結(jié)果分別作為所述多個(gè)預(yù)設(shè)查詢對(duì)象。10.根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述拆分模塊包括:確定子模塊,用于確定所述預(yù)設(shè)數(shù)據(jù)庫查詢語句的語句結(jié)構(gòu);劃分子模塊,用于按照所述語句結(jié)構(gòu),劃分出所述預(yù)設(shè)數(shù)據(jù)庫查詢語句的根節(jié)點(diǎn)和葉節(jié)點(diǎn);以及拆分子模塊,用于按照所述預(yù)設(shè)數(shù)據(jù)庫查詢語句的根節(jié)點(diǎn)和所述葉節(jié)點(diǎn)對(duì)所述預(yù)設(shè)數(shù)據(jù)庫查詢語句進(jìn)行拆分。【文檔編號(hào)】G06F17/30GK104462429SQ201410773953【公開日】2015年3月25日申請(qǐng)日期:2014年12月12日優(yōu)先權(quán)日:2014年12月12日【發(fā)明者】李亞東申請(qǐng)人:北京國(guó)雙科技有限公司