我想像做的那样分层解析任何 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);