Czy istnieje biblioteka Java typu open source do analizowania instrukcji SQL?
Jeśli to możliwe, powinien być dostosowywalny lub wystarczająco elastyczny, aby móc analizować (lub przynajmniej ignorować) składnię specyficzną dla dostawcy (na przykład definicje obszarów tabel Oracle lub klauzulę LIMIT MySQL).
Jeśli nie, ścisłe przestrzeganie standardu SQL również jest w porządku.
Aktualizacja: potrzebuję tego z dwóch powodów:
- udostępnianie interfejsu SQL do bazy danych innej niż SQL (mapowanie na wewnętrzne wywołania API)
- przepisywanie SQL zanim trafi do aktualnej bazy danych (np. Oracle)
Odpowiedzi:
ANTLR3 ma dostępną gramatykę ANSI SQL. Możesz użyć tego do stworzenia własnego parsera.
ANTLR4 ma gramatykę SQL .
źródło
źródło
Parser
Jeśli potrzebujesz parsera, w bazie kodu Apache Derby powinien znajdować się parser .
Radzenie sobie z językiem SQL specyficznym dla dostawcy
Możesz przyjrzeć się metodzie .native () w obiekcie jdbc Connection, do której możesz przekazać zapytania niezależne od dostawcy, które zostaną przetworzone na zapytania specyficzne dla dostawców.
źródło
General SQL Parser for Java nie jest oprogramowaniem typu open source, ale jest dokładnie tym, czego szukasz.
źródło
Wypróbuj Zql
źródło
Hibernate używa ANTLR do analizowania sql i hql.
JSqlParser jest również dobrą opcją, chociaż ma kilka błędów (lub niektóre funkcje nie zaimplementowane) podczas parsowania oracle pl / sql. zobacz jego forum po szczegóły.
więc jeśli analizujesz oracle pl / sql, zalecany jest ANTLR.
źródło
Co chcesz zrobić z przeanalizowanym kodem SQL? Mogę polecić kilka implementacji Lex / Yacc w Javie ( BYACC / J , Java Cup ), z którymi możesz wykorzystać istniejącą gramatykę SQL.
Jeśli chcesz coś zrobić z wynikową przeanalizowaną gramatyką, mogę zasugerować przyjrzenie się Derby , otwartej bazie danych SQL napisanej w Javie.
źródło