我正在尝试在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
提交
取消