我正在嘗試在Java中解析SELECT語句。我熟悉JOOQ,并希望使用它。我知道它并沒有明確設計為SQL解析器 - 它實際上遠不止于此,所以我在想可能有一種方法可以使用其內部解析器來解析SELECT查詢。我看到了一些有關如何使用訪問者模式訪問JOOQ的某些內部信息,但我需要使用樹狀結構在查詢內部導航,該結構將允許單獨訪問查詢的每個部分。我不想在所有用例中使用訪客模式。這可能嗎?我該怎么做?
2 回答

暮色呼如
TA貢獻1853條經驗 獲得超9個贊
是的,可以。jOOQ有一個可以使用的解析器:
從 jOOQ 3.17 開始,有一個實驗模型 API 可用于在外部遍歷表達式樹,例如使用模式匹配,或在內部使用新的遍歷器
API。在將表達式樹呈現回 SQL 時,仍然可以使用 VisitListener
遍歷表達式樹。

翻翻過去那場雪
TA貢獻2065條經驗 獲得超14個贊
完整的 SQL 解析器可從
DSLContext.parser()
和DSLContext.parsingConnection()
獲得(請參閱手冊中有關解析后者連接的部分)。
SQL 解析 API 頁面給出了這個簡單示例:
ResultQuery<?> query = DSL.using(configuration) .parser() .parseResultQuery("SELECT * FROM (VALUES (1, 'a'), (2, 'b')) t(a, b)");
parseResultQuery
是單個 SELECT 查詢所需的方法,如果可能有多個查詢,請使用 parse(String)。
添加回答
舉報
0/150
提交
取消