使用JSQLParser识别SQL中的函数调用

时间:2012-02-23 21:37:32

标签: java sql jsqlparser

如何使用JSQLParser区分函数调用和字段名称?

例如,查询SELECT COUNT(*) FROM db.tableCOUNT(*)解析为字段名称而不是函数调用。

如何更改SQL解析以将COUNT(*)显示为函数调用,我需要做什么?

谢谢,

最高

1 个答案:

答案 0 :(得分:6)

您没有示例代码,因此下面的代码基于我的猜测,您希望显示count(*)实际上只是一个函数调用。

import java.io.StringReader;

import net.sf.jsqlparser.JSQLParserException;
import net.sf.jsqlparser.expression.Function;
import net.sf.jsqlparser.parser.CCJSqlParserManager;
import net.sf.jsqlparser.statement.select.PlainSelect;
import net.sf.jsqlparser.statement.select.Select;
import net.sf.jsqlparser.statement.select.SelectExpressionItem;

public class MySQLParser
{
    CCJSqlParserManager parserManager = new CCJSqlParserManager();

    public MySQLParser() throws JSQLParserException
    {
        String statement = "SELECT COUNT(*) FROM db.table1";
        PlainSelect plainSelect = (PlainSelect) ((Select) parserManager.parse(new StringReader(statement))).getSelectBody();        
        System.out.format("%s is function call? %s",
                plainSelect.getSelectItems().get(0),
                ((Function)((SelectExpressionItem) plainSelect.getSelectItems().get(0)).getExpression()).isAllColumns());
    }
    public static void main(String[] args) throws JSQLParserException
    {

        new MySQLParser();

    }

}