style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Expresion Regular (Regex) de clausula SELECT

Hola amigos!

Estoy desarrollando una aplicación Java que me permita validar una consulta SQL ingresada por el usuario. Encontré 2 clases adecuadas para esto (Pattern y Matcher) y recién estoy documentándome sobre su uso. En esta ocasión vengo solicitándoles ayuda, para la cadena regex que necesito poner en el método compile de Pattern, para la cláusula SELECT, dado que no tengo experiencia con las expresiones regulares.

Buscando por internet encontré una diagrama muy general para ello, y me es bastante útil.
http://www.ipd.uni-karlsruhe.de/~modbprak/03-MobileDB_mit_Java/pb44/docs...

De antemano gracias por su atención, y espero puedan echarme una manita.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

eh?

Pattern y Matcher efectivamente sirven para manejar expresiones regulares, pero eso no es parte de la especificación de SQL. Sin embargo hay varios DBMS que aceptan expresiones regulares. Por ejemplo en PostgreSQL en vez de usar LIKE, usas ~: SELECT * FROM tabla WHERE campo_cadena ~ '^x[0-9]+' (para obtener registros de tabla donde campo_cadena empieza con x y luego son puros dígitos).

Pero que yo sepa en esos casos no usas Pattern ni Matcher sino que pasas directamente la expresión regular como parámetro. Usando PreparedStatements esto se vería como un PreparedStatement creado con SELECT * FROM tabla WHERE campo_cadena ~ ? y luego le pasas como primer parámetro la cadena ^x[0-9]+. Si usas backslash recuerda escaparlo.

validar una consulta SQL

validar una consulta SQL ingresada por el usuario. ¿Que es lo que quieres validar? Como lo estás pensando validar quizá ya exista algo hecho, como los prepared statements.

Si lo que quieres es ver que la sentencia sea una sentencia válida de SQL sería más fácil hacer un mini parser utilizando el diagrama que pusiste.

Si vas a hacer algo más serio ( que tenga usuarios reales y así ) convendría que utilizaras ANTRL para hacer este parser, es bastante directo y creo que ya hay ejemplos en el sitio para estas gramáticas.

Hay que tener en cuenta que varias BD's manejan su propio "sabor" de SQL.

Imagen de mmjose26

Sql Injection.

Solo un comentario,
si planeas hacer una aplicación que valide los queries, y luego los ejecute, ten un poco de cuidado con el SQL Injection, podrías sufrir ataques, por eso lo mas recomendable simpre es usar los PreparedStatement.
si solo es un ejercicio de expresiones regulares, olvidalo, no dije nada.

Saludos!

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">