Ответ 1
ANTLR3 имеет доступную грамматику ANSI SQL. Вы можете использовать это для создания собственного анализатора.
ANTLR4 имеет грамматику SQL.
Существует ли библиотека Java с открытым исходным кодом для анализа SQL-запросов?
Если возможно, он должен быть настраиваемым или достаточно гибким, чтобы также иметь возможность анализировать (или, по крайней мере, игнорировать) синтаксис конкретного поставщика (например, определения табличного пространства Oracle или предложение MySQL LIMIT).
Если нет, строгое соблюдение стандарта SQL также прекрасное.
Обновление: Мне нужно это для двух вещей:
ANTLR3 имеет доступную грамматику ANSI SQL. Вы можете использовать это для создания собственного анализатора.
ANTLR4 имеет грамматику SQL.
Parser
Если вам нужен парсер, должен быть синтаксический анализатор в базе кода Apache Derby.
Работа с SQL-сервером, специфичным для поставщика
Вы можете посмотреть на . native() метод на объекте соединения jdbc, который вы можете передать ему нейтральные запросы поставщика, которые получат постпроцессировать в специфические запросы поставщиков.
Общий SQL Parser для Java не является открытым исходным кодом, но это именно то, что вы заботитесь.
Попробуйте Zql
Hibernate использует ANTLR для синтаксического анализа sql и hql.
JSqlParser также является хорошим вариантом. Хотя у него есть некоторые ошибки (или некоторые функции не реализованы) при разборе oracle pl/sql. см. его форум для деталей.
поэтому, если вы разбираете oracle pl/sql, рекомендуется ANTLR.
Что вы хотите сделать с анализируемым SQL? Я могу порекомендовать несколько реализаций Java Lex/Yacc (BYACC/J, Java Cup), с которым вы можете использовать существующую грамматику SQL.
Если вы хотите на самом деле что-то сделать с полученной в результате анализируемой грамматикой, я могу предложить посмотреть Derby, базу данных SQL с открытым исходным кодом написанных на Java.