2012-02-23 949 views
1

如何使用JSQLParser區分函數調用和字段名稱?使用JSQLParser識別SQL中的函數調用

例如,查詢SELECT COUNT(*) FROM db.tableCOUNT(*)解析爲字段名稱而不是函數調用。

我需要做些什麼來改變SQL解析以顯示COUNT(*)作爲函數調用?

感謝,

最大

+0

延遲答案:使用最新版本(0.9.4),功能被正確識別。 – Markus 2016-05-24 15:29:30

回答

5

您沒有示例代碼,所以下面的代碼是基於我的猜測是要表明,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(); 

    } 

}