Cómo recuperar nombres de tablas y columnas de SQl usando JSQLPARSE

Estoy usando JSQLPARSER por primera vez. Tengo algunos archivos SQL que vienen dinámicamente, necesito leer los nombres de tablas y columnas de ese SQL. Después de mucho googlear probé con JSQLPARSER. Estoy tratando de leer los nombres de columna del archivo pero no puedo leer los nombres de columna debido a la expresión, por favor, ¿alguien puede corregir mi código donde me equivoqué? Estoy obteniendo el código 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());      
         }
    }
Respuesta 1
public class TablesNamesFinder 
    implements SelectVisitor, FromItemVisitor, ExpressionVisitor, 
    ItemsListVisitor
{
    private List tables;

    public List getTableList(Select select) {
        tables = new ArrayList();
        select.getSelectBody().accept(this);
        return tables;
    }

    public void visit(PlainSelect plainSelect) {
        plainSelect.getFromItem().accept(this);

        if (plainSelect.getJoins() != null) {
            for (Iterator joinsIt = plainSelect.getJoins().iterator(); joinsIt.hasNext();) {
                Join join = (Join) joinsIt.next();
                join.getRightItem().accept(this);
            }
        }
        if (plainSelect.getWhere() != null)
            plainSelect.getWhere().accept(this);

    }

    public void visit(Union union) {
        for (Iterator iter = union.getPlainSelects().iterator(); iter.hasNext();) {
            PlainSelect plainSelect = (PlainSelect) iter.next();
            visit(plainSelect);
        }
    }

    public void visit(Table tableName) {
        String tableWholeName = tableName.getWholeTableName();
        tables.add(tableWholeName);
    }

    public void visit(SubSelect subSelect) {
        subSelect.getSelectBody().accept(this);
    }
//and other visit implement ....

}
Respuesta: 2

El tercer valor que solicita con su selección no es una columna sino una función. Por lo tanto, JSqlParser ofrece una expresión que no puede convertir a Column.

Respuesta: 3

Estoy escribiendo en la ventana del navegador usando servletResponse.getWriter (). Write (String). Pero, ¿cómo borro el texto que fue escrito previamente por alguna otra llamada de escritura similar?

Posible duplicado: configuración del tamaño de almacenamiento dinámico de JVM en tiempo de ejecución ¿Es posible evitar que un programa se bloquee cuando encuentra un OutOfMemoryError aumentando la memoria permitida para el programa? Lata ...

Soy un codificador novato de Java y acabo de leer una variable de una clase entera que se puede describir de tres maneras diferentes en la API. Tengo el siguiente código: if (count.compareTo (0)) {System.out ....

public static boolean checkTimeFormat (String str) {try {SimpleDateFormat sdf = new SimpleDateFormat ("aaaa-MM-dd HH: mm: ss"); sdf.parse (str); volver verdadero; } captura (...