2016-05-16 6 views
7

Я только начал изучать JSqlparser. По моему мнению, я изменил TablesNamesFinder для извлечения столбцов и таблиц и его работы, но очень маленькая проблема.JSqlParser - Получение имени таблицы из столбца

@Override 
public void visit(Column col) { 
    Column c = col; 
    String cname = c.getFullyQualifiedName(); 
    Table t = c.getTable(); 
    System.out.println(t.getName()); 
} 

Это обыкновение печать таблицы, для большинства случаев она печатает нулевой и очень немногих случаях он печатает псевдоним таблицы, но не таблицы. Я чего-то забываю?

Остальной посещений

@Override 
public void visit(SelectExpressionItem exp){ 
    exp.getExpression().accept(this); 
}   

@Override 
public void visit(Table tableName) { 
    // System.out.println(tableName.getFullyQualifiedName()); 
} 

@Override 
public void visit(Select select) { 
    select.getSelectBody().accept(this); 
} 

ответ

6

Прежде всего ваш исходный код является правильным. Вы должны иметь в виду:

JSqlParser is только парсер. Так что если вы делаете что-то вроде

select col1 from table1 

Анализатора генерируется объект Колонка не знает свою имя_таблицу. Это только в случае, если вы полностью пишете его:

select table1.col1 from table1 

Подобное поведение наблюдается при использовании псевдонимов. JSqlParser не расшифровывает определения псевдонима.

Почему? Если вы посмотрите на этот пример, который является правильным SQL:

select col1 from table1, table2 

становится ясно, что вычисление таблицы столбец принадлежит нуждается в самой базе данных схемы.

+0

и для совокупных функций, таких как sum (col1 * col2), я могу поймать их во время посещения функций, есть ли лучший способ? Могу ли я получить дополнительную информацию о том, какие имена частей, которые вы предоставили для запроса. Например: Выбрать (col1, col2, col3,) здесь col1, col2, col3 - выбрать тело. Могу ли я получить wiki? – Waleed

+0

Я не уверен, что вы имеете в виду? Вы имеете в виду контекст? Как в столбце, внутри которого строится (например, какая функция)? Контекст выводится из дерева разбора. Использование посетителя, как и вы, это нормально. – wumpz