[發明專利]一種查詢語句解析與再處理的方法和裝置在審
| 申請號: | 201310692598.0 | 申請日: | 2013-12-17 |
| 公開(公告)號: | CN104714974A | 公開(公告)日: | 2015-06-17 |
| 發明(設計)人: | 范鋼;偶瑞軍 | 申請(專利權)人: | 航天信息股份有限公司 |
| 主分類號: | G06F17/30 | 分類號: | G06F17/30;G06F9/44 |
| 代理公司: | 北京科龍寰宇知識產權代理有限責任公司 11139 | 代理人: | 孫皓晨 |
| 地址: | 100097 *** | 國省代碼: | 北京;11 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 查詢 語句 解析 處理 方法 裝置 | ||
技術領域
本發明涉及數據庫查詢領域,具體而言,涉及一種查詢語句解析與再處理的方法和裝置。
背景技術
目前市面上各個大型web(網絡)系統、大型信息化管理系統都普遍存在大型數據庫查詢的需求,過去在進行數據庫查詢時通常都是寫死在各個功能模塊中。但隨著軟件技術的發展,越來越多的軟件系統都嘗試采用平臺式開發,以期降低整體研發成本與研發周期。在這樣一個整體背景下,各種通用查詢方案孕育而生。在所有通用查詢方案中幾乎都無法繞過一個重要的技術課題,那就是對查詢語句的解析,從而實現對查詢語句的分頁、排序、分組功能的處理等等。
在這樣一個背景下,各大軟件廠商都提出了各自不同的對查詢語句的解析與處理的方案與設計,但這些方案與設計普遍存在兩個方面的問題:
1)過程過于復雜與龐大。大多數方案都嘗試對查詢語句的完全解析,而由于查詢語句自身的復雜與多變,完全解析需要考慮的情況實在太多,使得這些解決方案陷入了無法窮解的尷尬境地。查詢語句的解析與處理真的需要對原有查詢語句進行完全解析嗎?處理過程過于復雜必然造成設計成本的增加、出錯風險的加大與維護難度的激增。如果客戶需求并不需要這種完全的解析就可以解決問題,那么這樣的設計必然造成一種浪費。因此本方法本著務實與精煉的思想,另辟蹊徑提出了新的設計思路。
2)處理過于簡單而未考慮性能。許多諸如分頁、排序、分組等方案,采用了一些過于簡單、易于實現的方式。但這些方式在進行數據查詢往往會出現效率低下的問題,特別在面對超大數據庫的狀況下。因此本方法在許多地方的設計更加著眼于在面對超大數據庫的性能問題,并在實際應用中獲得了較好的效果。
3)未著眼于開發人員的使用。這里對查詢語句的解析與處理,其目的就是要為開發人員提供通用的開發平臺,提供通用的查詢功能。因此,該功能針對的客戶群是開發人員,在設計上應當更多地考慮開發人員使用的便捷、易用與靈活。因此本方法充分考慮了這些方面的問題,并在實際項目中得到了廣泛的應用。
發明內容
本發明提供一種查詢語句解析與再處理的方法和裝置,通過對查詢語句的處理,一方面可以方便開發人員以更加靈活便捷地方式設計查詢功能,另一方面為原始的查詢語句提供了高效分頁查詢、動態排序與分組等功能,為大型管理系統設計通用查詢平臺創造了條件。
為達到上述目的,本發明提供了一種查詢語句解析與再處理的方法,包括以下步驟:
定義一個類,所述類包含6項屬性,分別對應標準查詢語句的6個查詢子句;
根據用戶提供的原始查詢語句和查詢參數集,將所述原始查詢語句的主查詢語句解析為6個查詢子句,包括select、from、where、group?by、having、order?by,并用查詢對象對應的6個屬性分別將得到的查詢子句進行存儲,其中所述原查詢語句包含至少一個查詢子句,對于所述原查詢語句不包含的查詢子句,所述類對應的屬性為空;
在查詢對象中,分別對解析后的查詢子句進行分頁、分組、排序至少一項的處理。
根據所述處理后,重新拼裝進而形成新的查詢語句及其查詢參數,執行查詢操作。
進一步地,所述標準查詢語句的6個查詢子句分別為select、from、where、group?by、having、order?by,對應于所述類中的6項屬性分別為SqlProxy.select、SqlProxy.from、SqlProxy.where、SqlProxy.groupBy、SqlProxy.having、SqlProxy.orderBy,對所述原查詢語句的解析過程如下:
找出沒有包含在任何括號中的以下關鍵字:select、from、where、group?by、having、order?by;
將在select與from之間的select子句存儲在SqlProxy.select屬性中;
from子句位于from與where之間,在檢查時如果沒有where關鍵字則檢查group?by關鍵字,如果也沒有則檢查order?by關鍵字,如果還沒有則從from關鍵字一直檢查至字符串結束,將from子句存儲在SqlProxy.from屬性中;
如果有where關鍵字,在where與group?by之間的是where子句,如果沒有group?by關鍵字則在where與order?by之間,否則一直包含到字符串結束,將where子句存儲在SqlProxy.where屬性中;
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于航天信息股份有限公司;,未經航天信息股份有限公司;許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201310692598.0/2.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:一種動態的查詢語句處理方法及其裝置
- 下一篇:一種基于降維的二維插值方法





