0

我想像做的那样分层解析任何 SQL 查询CCJSqlParserUtil.parseAST。但是如果我没记错的话,这个函数只支持select查询等几种SQL查询。当我将它应用于更新查询时,它不起作用。

我认为 JSqlparser 中的其他解析方式无济于事,因为我还需要知道所有标记的位置。

这是一个片段,可以显示我想用这个解析器做什么:

String sql ="UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing'\n"
            + "WHERE LastName = 'Wilson';"; // even nicer if multiple queries can be parsed without being splitted
final StringBuilder b = new StringBuilder(sql);
SimpleNode node = (SimpleNode) CCJSqlParserUtil.parseAST(sql);
node.dump("*");

node.jjtAccept(
    new CCJSqlParserDefaultVisitor() {
      @Override
      public Object visit(SimpleNode node, Object data) {
        logger.info(
            node.jjtGetValue()
                + ","
                + node.jjtGetFirstToken().beginLine
                + ","
                + (node.jjtGetFirstToken().beginColumn - 1));
        logger.info(
            node.jjtGetValue()
                + ","
                + node.jjtGetLastToken().endLine
                + ","
                + (node.jjtGetLastToken().endColumn - 1));
        return super.visit(node, data);
      }
    },
    null);
4

0 回答 0