2010-08-20 5 views
6

¿Alguien sabe acerca de un analizador de sentencias SQL, en Java, que permitiría tener una representación de objeto de una consulta SQL, permitir modificar esta representación y generar de nuevo la instrucción SQL actualizada?Análisis y modificación de sentencias SQL en Java

Saludos, Christophe

+3

Por curiosidad: ¿por qué quieres hacer esto? Podríamos sugerir alternativas. –

+0

Apoyo la pregunta de @Peter Tillemans. Tal vez haya una forma de crear la representación del árbol de objetos de antemano, haga lo que desee y solo traduzca a SQL como una exportación final para ejecutar. – helios

+0

Estoy trabajando en el nivel de controlador JDBC (y quiero) para capturar sentencias de SQL enviadas por mi aplicación, pero me gustaría reescribir estas declaraciones parcialmente (modifique algunos nombres de tabla, por ejemplo). – Christophe

Respuesta

2

Me gustaría pensar que ANTLR sería capaz de hacer esto.

+0

Creo que sí, pero estaba buscando una solución, digamos, más simple. Con ANTLR, aún necesito generar el analizador por mi cuenta y, de hecho, no encontré la información si la gramática ANSI SQL era compatible con ANTLR v3. No estoy seguro de que pueda actualizar el modelo y generar de nuevo la cadena SQL. – Christophe

+0

No estoy muy familiarizado con ANTLR. Estoy bastante seguro de que puedes actualizar el modelo. La regeneración de la cadena de SQL debería ser, en el peor de los casos, una tarea simple de caminar y imprimir, y ANTLR tiene algo llamado "plantillas de cadena" para ayudar. Sí, es probable que haya hecho algún trabajo para obtener su resultado si usa ANTLR. Deberías preguntar en el sitio de ANTLR. –

+1

Algunos comentarios tardíos ... ANTLR definitivamente es la solución para eso. Usé la gramática SQL junto con ANTLR v2. Modifiqué la gramática para registrar los tokens que tenían el ASTNode "mesa" y cambié sus valores. – Christophe

0

Quizás pueda mirar JSqlParser.

+0

Encontré ese también. No está muy claro si puede cambiar el modelo de SQL y recuperar el SQL reescrito. Tal vez toString() hará el trabajo. – Christophe

0

Ésta es una demo use Java SQL Parser hacer algo como esto:

SQL de entrada:

SELECT A as A_Alias, B AS B_Alias FROM TABLE_X 

Si necesita quitar la segunda columna “B como B_Alias” de la lista de selección, simplemente hacer algo como esto :

columns.removeResultColumn(1); // 0 is the first column 

por lo que recibirá este nuevo SQL (el, fue eliminado automáticamente):

SELECT A as A_Alias FROM TABLE_X 

esta demo también ilustra cómo reemplazar una columna, añadir criterios (cláusula where), Añadir cláusula ORDER BY, etc

Cuestiones relacionadas