2010-08-20 3 views
6

Kennt jemand einen SQL-Statement-Parser in Java, der eine Objektrepräsentation einer SQL-Abfrage ermöglicht, die Änderung dieser Repräsentation erlaubt und die aktualisierte SQL-Anweisung zurückgibt?Parsen und Ändern von SQL-Anweisungen in Java

Grüße, Christophe

+3

Aus Neugier: warum wollen Sie das tun? Wir könnten Alternativen vorschlagen. –

+0

Ich unterstütze @Peter Tillemans Frage. Vielleicht gibt es eine Möglichkeit, die Objektbaumdarstellung vorher zu erstellen, zu tun, was immer Sie wollen, und sie nur als endgültigen Export für die Ausführung in SQL zu übersetzen. – helios

+0

Ich arbeite auf der JDBC-Treiber-Ebene (und möchte ich), um SQL-Anweisungen abzufangen, die von meiner Anwendung gesendet werden, aber ich möchte diese Anweisungen teilweise neu schreiben (zum Beispiel einige Tabellennamen ändern). – Christophe

Antwort

2

Ich würde denken, dass ANTLR der Lage wäre, dies zu tun.

+0

Ich denke schon, aber ich suchte nach einer, sagen wir, einfacheren Lösung. Mit ANTLR muss ich noch den Parser selbst erzeugen und tatsächlich habe ich die Information nicht gefunden, wenn die SQL ANSI Grammatik mit ANTLR v3 kompatibel war. Nicht sicher, dass Sie das Modell auch aktualisieren und die SQL-Zeichenfolge zurück generieren können. – Christophe

+0

Ich bin nicht sehr vertraut mit ANTLR. Ich bin mir ziemlich sicher, dass Sie das Modell aktualisieren können. Das Neugenerieren der SQL-Zeichenfolge sollte im schlimmsten Fall einen einfachen Tree-Walk-and-Print ergeben, und ANTLR hat etwas, das "String-Vorlagen" genannt wird, um zu helfen. Ja, Sie müssen wahrscheinlich etwas arbeiten, um Ihr Ergebnis zu erhalten, wenn Sie ANTLR verwenden. Sie sollten auf der ANTLR-Website fragen. –

+1

Einige späte Rückmeldungen ... ANTLR ist definitiv die Lösung dafür. Ich benutzte die SQL-Grammatik zusammen mit ANTLR v2. Ich änderte die Grammatik, um die Token zu speichern, die "Tabelle" ASTNode enthalten, und änderte ihre Werte. – Christophe

0

Vielleicht könnten Sie JSqlParser betrachten.

+0

Ich habe das auch gefunden. Es ist nicht sehr klar, ob Sie das SQL-Modell ändern und das umgeschriebene SQL zurückbekommen können. Vielleicht wird toString() den Job machen. – Christophe

0

Dies ist ein demo use Java SQL Parser etwas tun:

Eingang SQL:

SELECT A as A_Alias, B AS B_Alias FROM TABLE_X 

Wenn Sie die zweite Spalte „B AS B_Alias“ aus der Auswahlliste entfernen müssen, nur etwas tun :

columns.removeResultColumn(1); // 0 is the first column 

, dann wird diese neue SQL bekommen (das wurde automatisch entfernt):

SELECT A as A_Alias FROM TABLE_X 

diese Demo zeigt auch, wie eine Spalte zu ersetzen, hinzufügen Kriterien (where-Klausel), fügen Von sortieren Klausel usw.