¿Existe una biblioteca Java de código abierto para analizar sentencias SQL?
Si es posible, debe ser personalizable o lo suficientemente flexible como para poder analizar (o al menos ignorar) la sintaxis específica del proveedor (como las definiciones de espacios de tabla de Oracle o la cláusula LIMIT de MySQL).
Si no, la estricta adherencia al estándar SQL también está bien.
Actualización: necesito esto para dos cosas:
- Proporcionar una interfaz SQL a una base de datos que no sea SQL (asignación a llamadas API internas)
- reescribir SQL antes de que vaya a la base de datos real (por ejemplo, Oracle)
Respuestas:
ANTLR3 tiene una gramática ANSI SQL disponible. Puede usar eso para crear su propio analizador.
ANTLR4 tiene una gramática SQL .
fuente
fuente
Analizador
Si necesita un analizador, debe haber un analizador en la base de código de Apache Derby .
Tratar con SQL específico del proveedor
Es posible que desee ver el método .native () en el objeto de conexión jdbc, al que puede pasar consultas neutrales del proveedor que se procesarán posteriormente en consultas específicas del proveedor.
fuente
General SQL Parser para Java no es de código abierto, pero es exactamente lo que está buscando.
fuente
Prueba Zql
fuente
Hibernate usa ANTLR para el análisis de sql y hql.
JSqlParser también es una buena opción, aunque tiene algunos errores (o algunas características no implementadas) al analizar oracle pl / sql. ver su foro para más detalles.
así que si está analizando oracle pl / sql, se recomienda ANTLR.
fuente
¿Qué quieres hacer con el SQL analizado? Puedo recomendar algunas implementaciones Java de Lex / Yacc ( BYACC / J , Java Cup ) con las que puede usar una gramática SQL existente.
Si realmente quiere hacer algo con la gramática analizada resultante, podría sugerir que busque en Derby , una base de datos SQL de código abierto escrita en Java.
fuente