2016-05-16 3 views
7

Ich habe gerade begonnen, JSqlparser zu erkunden. Nach meinem Verständnis habe ich den TablesNamesFinder modifiziert, um Spalten und Tabellen zu extrahieren, und es funktioniert gut, aber ein sehr kleines Problem.JSqlParser - Abrufen des Tabellennamens von Spalte

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

Dieser pflegt Drucktisch, für den meisten Fällen druckt es null und für sehr wenige Fälle, druckt er Alias ​​der Tabelle, aber nicht die Tabelle. Gibt es etwas, was ich vergesse?

Erholung der Besuche

@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); 
} 

Antwort

6

Zu allererst ihren Quelltext ist richtig. Sie müssen Folgendes beachten:

JSqlParser ist nur ein Parser. Also, wenn Sie wie

etwas tun
select col1 from table1 

Der Parser erzeugte Objekt Spalte weiß nicht, seinen Tabellennamen. Dies ist nur der Fall, wenn Sie es vollständig qualifiziert schreiben:

Ähnliche Verhalten tritt bei Aliasen. JSqlParser erweitert nicht Alias-Definitionen.

Warum? Wenn Sie in diesem Beispiel sehen, die eine korrekte SQL:

select col1 from table1, table2 

klar wird, dass die Tabelle Berechnung der Spalte gehört muss das Datenbankschema selbst.

+0

und für Aggregatfunktionen wie sum (col1 * col2), kann ich diese in Funktionen besuchen, gibt es einen besseren Weg? Kann ich mehr Informationen über die Namen der Teile haben, die Sie zur Abfrage angegeben haben? Wie: Wählen Sie (Spalte1, Spalte2, Spalte3,) hier Spalte1, Spalte2, Spalte3 sind Auswahl Körper. Kann ich ein Wiki haben? – Waleed

+0

Ich bin mir nicht sicher, was du meinst? Meinst du Kontext? Wie welche Spalte in welchem ​​Konstrukt (z. B. welche Funktion)? Der Kontext ist von dem Syntaxbaum ableitbar. Den Besucher wie Sie zu benutzen, ist in Ordnung. – wumpz