Gibt es eine Open-Source-Java-Bibliothek zum Parsen von SQL-Anweisungen?
Wenn möglich, sollte es anpassbar oder flexibel genug sein, um auch herstellerspezifische Syntax (wie Oracle-Tablespace-Definitionen oder die LIMIT-Klausel von MySQL) analysieren (oder zumindest ignorieren) zu können.
Wenn nicht, ist auch die strikte Einhaltung des SQL-Standards in Ordnung.
Update: Ich brauche das für zwei Dinge:
- Bereitstellung einer SQL-Schnittstelle für eine Nicht-SQL-Datenbank (Zuordnung zu internen API-Aufrufen)
- Umschreiben von SQL, bevor es in die eigentliche Datenbank (z. B. Oracle) wechselt
Antworten:
ANTLR3 verfügt über eine ANSI-SQL-Grammatik. Damit können Sie Ihren eigenen Parser erstellen.
ANTLR4 hat eine SQL-Grammatik .
quelle
quelle
Parser
Wenn Sie einen Parser benötigen, sollte sich in der Codebasis von Apache Derby ein Parser befinden .
Umgang mit herstellerspezifischem SQL
Möglicherweise möchten Sie sich die .native () -Methode für das jdbc-Verbindungsobjekt ansehen, mit der Sie herstellerneutrale Abfragen übergeben können, die in herstellerspezifische Abfragen nachbearbeitet werden.
quelle
General SQL Parser für Java ist kein Open Source, aber genau das, wonach Sie suchen.
quelle
Versuchen Sie es mit Zql
quelle
Hibernate verwendet ANTLR für die Analyse von SQL und SQL.
JSqlParser ist auch eine gute Option. Es gibt jedoch einige Fehler (oder einige Funktionen, die nicht implementiert sind) beim Parsen von Oracle pl / sql. Einzelheiten finden Sie im Forum.
Wenn Sie also Oracle pl / sql analysieren, wird ANTLR empfohlen.
quelle
Was möchten Sie mit dem analysierten SQL tun? Ich kann einige Java-Implementierungen von Lex / Yacc ( BYACC / J , Java Cup ) empfehlen , mit denen Sie eine vorhandene SQL-Grammatik verwenden können.
Wenn Sie tatsächlich etwas mit der resultierenden analysierten Grammatik anfangen möchten, empfehle ich Ihnen Derby , eine in Java geschriebene Open-Source-SQL-Datenbank.
quelle