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

在Java中解构SQL语句

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

    我有一些遗留的SQL,我想把它分成它的组成部分&;然后添加更多条件、按子句排序等。

    有没有现有的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 回复  |  直到 17 年前
        1
  •  2
  •   Ron    17 年前

    我将使用sql解析器(javacc、jparsec、antlr)将字符串分解为AST。一旦你有了这种结构,你就可以在描述时使用它,并在最后以字符串的形式发出修改后的版本。

        2
  •  2
  •   Rob Di Marco    17 年前

    您可能想结账 SQL Builder 图书馆。它是一个基于构建器模式的库,用于构建SQL语句。我不确定它是否有解构部分,你可以给它一个SQL语句,然后把它分解成几个部分。

        3
  •  1
  •   James Wang    14 年前

    这是一个演示,说明如何 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
    

    选择列表、分组方式、顺序子句也可以轻松修改。

        4
  •  0
  •   Laurent Simon    17 年前

    Zsql