2008-09-26 14 views
13

No estoy seguro de si esto existe o no, así que pensé en aprovechar la sabiduría de los demás ...¿Hay bibliotecas de Java que validen la sintaxis de SQL?

Me preguntaba si hay bibliotecas de Java disponibles que puedan usarse para validar una consulta SQL sintaxis. Sé que hay muchas desviaciones de la especificación SQL común, por lo que probablemente solo funcione en contra de algo como SQL: 2006, pero eso sería suficiente.

Mi objetivo es utilizar esto para fines de pruebas unitarias sin necesidad de intentar la ejecución contra la base de datos. Sé que es de uso limitado, pero aún sería útil.

Gracias!

+0

¿Necesita validar SQL de un proveedor específico o ANSI SQL estándar? Todos los principales proveedores de DBMS de SQL se apartaron significativamente del estándar al ampliarlo e infrautilizarlo al mismo tiempo. – Constantin

+0

¿Cómo es esta pregunta no constructiva? – rtcarlson

+0

@awied ¿Alguna vez encontró una buena solución para esto? – mdewit

Respuesta

4

No creo que haya tales bibliotecas. La sintaxis SQL tiene demasiados derivados.

Una posible solución sería usar partes de un código abierto Java puro DBMS como SmallSQL. En este proyecto, puede crear una instancia del SQLParser. Las referencias necesarias a la conexión se pueden eliminar muy fácilmente.

+0

¿Es por casualidad un desarrollador de SmallSQL? – Constantin

+0

Sí, soy uno de los desarrolladores. – Horcrux7

+0

@ Horcrux7: descargué SmallSQL ahora mismo. No parecía tan fácil eliminar la referencia SSConnection. Parece que SQLParser valida la sintaxis de SQL al comparar con un esquema de base de datos real. (Por ejemplo, el método SQLParser.from() intenta conectarse a la base de datos). –

1

Es posible que pueda extraer el código de análisis del HSQL, que es Java y de código abierto.

4

Quizás pueda usar Antlr, tiene un número de SQL grammars y Java library, así como también complementos para varios IDEs de Java.

O como se recomienda, utilice el analizador de las utilidades SQL de código abierto como SQuirreL SQL Client.

2

Trate JSQL parser.

Además de la validación, obtiene una representación significativa de la consulta.
Esto le permite, por ejemplo, aceptar solo "ciertos" comandos; manipular
la consulta, "embellecerla", etc.

2

Con JOOQ nunca cometerá un error en SQL. El compilador de Java se encargará de eso.

+0

Si está utilizando JOOQ solo como generador de consultas, ¿hay algún mecanismo de Jooq para validar el SQL generado (como por ejemplo en una prueba de Junit)? – hovanessyan

+0

@hovanessyan No es necesario validarlos, creo, porque JOOQ emite SQL válido. –

+0

JOOQ le permite escribir instrucciones SQL usted mismo, por lo que si omite una coma o corchetes o smth, el SQL no será válido. JOOQ emite SQL válido si está utilizando las clases de modelo generadas; solo lo estoy usando como SQL Builder y no depende de la generación del modelo, por lo que es posible generar SQL no válido. – hovanessyan

Cuestiones relacionadas