Как получить имена таблиц и столбцов из SQl с помощью JSQLPARSE

Я использую JSQLPARSER впервые. У меня есть несколько файлов SQL, которые приходят динамически, мне нужно прочитать имена таблиц и столбцов из этого SQL. После долгих поисков я попробовал JSQLPARSER. Я пытаюсь прочитать имена столбцов из файла, но я не могу прочитать имена столбцов из-за выражения, пожалуйста, может ли кто-нибудь исправить мой код, где я ошибся. Я получаю код CLASSCASTEXCEPTION:

public static void main(String[] args) throws JSQLParserException
    {
        // TODO Auto-generated method stub
         String statement="SELECT LOCATION_D.REGION_NAME, LOCATION_D.AREA_NAME, COUNT(DISTINCT INCIDENT_FACT.TICKET_ID) FROM LOCATION_D, INCIDENT_FACT WHERE ( LOCATION_D.LOCATION_SK=INCIDENT_FACT.LOCATION_SK ) GROUP BY LOCATION_D.REGION_NAME, LOCATION_D.AREA_NAME"; 
         CCJSqlParserManager parserManager = new CCJSqlParserManager();
         Select select=(Select) parserManager.parse(new StringReader(statement));

         PlainSelect plain=(PlainSelect)select.getSelectBody();     
         List selectitems=plain.getSelectItems();
         System.out.println(selectitems.size());
         for(int i=0;i<selectitems.size();i++)
         {
            Expression expression=((SelectExpressionItem) selectitems.get(i)).getExpression();  
            System.out.println("Expression:-"+expression);
            Column col=(Column)expression;
            System.out.println(col.getTable()+","+col.getColumnName());      
         }
    }

person Navyah    schedule 27.05.2013    source источник


Ответы (2)


Третье значение, которое вы запрашиваете при выборе, — это не столбец, а функция. Поэтому JSqlParser предоставляет выражение, которое нельзя привести к столбцу.

person wumpz    schedule 07.02.2014

Как указал wumpz на проблему, функция в списке не может быть приведена к столбцу. То же самое и с моим требованием, и этот код помог в его решении. Надеюсь это поможет. Выражение может быть проверено, является ли оно столбцом или функцией, и может использоваться соответствующим образом.

        for(int i=0;i<selectitems.size();i++)
        {
           Expression expression=((SelectExpressionItem) selectitems.get(i)).getExpression();  
           System.out.println("Expression:-"+expression);
           if( expression instanceof Column)
           {
               Column col=(Column)expression;
               System.out.println(col.getTable()+","+col.getColumnName());      

           }
           else if (expression instanceof Function)
           {
               Function function = (Function) expression;
               System.out.println(function.getAttribute()+","+function.getName()+""+function.getParameters());      

           }

        }
person karthik    schedule 02.01.2018