代码之家  ›  专栏  ›  技术社区  ›  Harry Lime

Java中SQL语句的解构

  •  3
  • Harry Lime  · 技术社区  · 15 年前

    我有一些遗留的SQL,我想将其拆分为它的组成部分,然后添加更多的条件、ORDERBY子句等。

    有没有现存的Java库,像这样解释SQL?

    所以我想做点什么

    deconstructedSQL.getCriteria().add("price > 100");
    

    deconstructedSQL.getOrderBy().add("price");
    

    String select = deconstructedSQL.getSelect();
    if ("*".equals(select))
    {
        deconstructedSQL.setSelect("my_table.*");
    }
    

    我可以使用Hibernate中的方言将特定于数据库的信息添加到分页中。( setFirstResult 和; setMaxResult 但是我想再进一步。

    4 回复  |  直到 13 年前
        1
  •  2
  •   Ron    15 年前

    我将使用SQL解析器(javacc、jparsec、antlr)将字符串分解为AST。一旦您将它置于这种结构中,您就可以按照您的描述来使用它,并最终将修改后的版本作为字符串发出。

        2
  •  2
  •   Rob Di Marco    15 年前

    您可能想签出 SQL Builder 图书馆。它是一个构建SQL语句的基于构建器模式的库。如果它有一个解构部分,你可以给它一个SQL语句,然后让它分解为多个部分,那我就不乐观了。

        3
  •  1
  •   James Wang    13 年前

    这是演示如何 Deconstruct, Modify, Rebuild an SQL statement 在SQL解析器的帮助下。

    原始SQL:

    SELECT * FROM TABLE_X where f > 0
    

    Java代码:

    assertTrue(parser.parse() == 0);
    TSelectSqlStatement select = (TSelectSqlStatement)parser.sqlstatements.get(0);
    select.addWhereClause("c>1");
    

    你得到的是:

    SELECT * FROM TABLE_X where f > 0 and c>1
    

    还可以方便地修改select list、group by、order子句。

        4
  •  0
  •   Laurent Simon    15 年前

    这个 Zsql 框架与您的描述完全匹配(未测试)。