| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/11/2010 18:40:25
|
anderson_lp789
JavaGuru
Membro desde: 19/06/2010 19:24:50
Mensagens: 206
Offline
|
gente estou a fazer um programa no qual o usuário pode escrever suas consultas no banco de dados, e eu preciso validar isso (sua sintaxe somente) tem algum parse que faz isso em java? alguém tem uma dica?
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/11/2010 18:44:36
|
thiago.filadelfo
Virtual Machine Man
![[Avatar]](/images/avatar/a0dabc6f2a8ea64b7fb210eec0175a02.jpg)
Membro desde: 07/07/2007 00:32:26
Mensagens: 579
Localização: São Paulo
Offline
|
Olá
Acho que você usar expressao regular deve ficar interessante a validação
http://www.piazinho.com.br/
Ps. Algumas adaptações devem ser feita, mas em termos todos os conceitos são válidos
Espero ter ajudado
Flwsss
|
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/11/2010 18:56:15
|
anderson_lp789
JavaGuru
Membro desde: 19/06/2010 19:24:50
Mensagens: 206
Offline
|
thiago.filadelfo wrote:Olá
Acho que você usar expressao regular deve ficar interessante a validação
http://www.piazinho.com.br/
Ps. Algumas adaptações devem ser feita, mas em termos todos os conceitos são válidos
Espero ter ajudado
Flwsss
bom desculpa pergunta, mas meu conhecimento de expressões regulares é bem baixo, como o uso de expressões regulares pode ser útil para o meu caso? compensa comprar este livro que vc me passou realmente?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/11/2010 19:22:18
|
thiago.filadelfo
Virtual Machine Man
![[Avatar]](/images/avatar/a0dabc6f2a8ea64b7fb210eec0175a02.jpg)
Membro desde: 07/07/2007 00:32:26
Mensagens: 579
Localização: São Paulo
Offline
|
Olá
Então não precisa comprar o livro, tem uma sessão de exemplos que explica sua funcionalidade.
Como a expressão regular pode fazer para te ajudar é validar "sintaxicamente".
Por exemplo:
REGEX: SELECT\s(\*|\w+)\sFROM\s(\w+);
O que validaria: SELECT * FROM tabela; ou SELECT nome FROM tabela
Caso você escreva SELEC * FROM tabela, ele acusa erro de sintaxe. Por dois motivos não terminou com ponto e virgula ( e escreveu SELEC ao invez de SELECT....
assim por diante...
No site que passei tem o livro, mas tem uma parte bastante vasta de exemplo, acho legal dar uma olhada.
ok!?
|
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/11/2010 19:23:04
|
thiago.filadelfo
Virtual Machine Man
![[Avatar]](/images/avatar/a0dabc6f2a8ea64b7fb210eec0175a02.jpg)
Membro desde: 07/07/2007 00:32:26
Mensagens: 579
Localização: São Paulo
Offline
|
thiago.filadelfo wrote:Olá
Então não precisa comprar o livro, tem uma sessão de exemplos que explica sua funcionalidade.
Como a expressão regular pode fazer para te ajudar é validar "sintaxicamente".
Por exemplo:
REGEX: SELECT\s(\*|\w+)\sFROM\s(\w+);
O que validaria: SELECT * FROM tabela; ou SELECT nome FROM tabela;
Caso você escreva SELEC * FROM tabela, ele acusa erro de sintaxe. Por dois motivos não terminou com ponto e virgula (  e escreveu SELEC ao invez de SELECT....
assim por diante...
No site que passei tem o livro, mas tem uma parte bastante vasta de exemplo, acho legal dar uma olhada.
ok!?
|
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/11/2010 19:29:00
|
anderson_lp789
JavaGuru
Membro desde: 19/06/2010 19:24:50
Mensagens: 206
Offline
|
humm estou compreendendo, parece ser mesmo interessante! no livro ele fala sobre o SQLite, quer dizer q ele implementa regex pra ele é isso?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/11/2010 19:34:27
|
thiago.filadelfo
Virtual Machine Man
![[Avatar]](/images/avatar/a0dabc6f2a8ea64b7fb210eec0175a02.jpg)
Membro desde: 07/07/2007 00:32:26
Mensagens: 579
Localização: São Paulo
Offline
|
Primeiramente desculpe por responder duas vezes, acabei apertando o botao errado.
Infelizamente não aborda SQLite como banco de dados, mas ele aborda somente expressao regular.
Que pode ser usado para fazer validações ou até mesmo "splits".
Expressao regular é bem poderosa, mas custa bastante para o processamento.
Fiz uma projeto em ME os scripts sql são validados e processados através de expressão regular.
This message was edited 1 time. Last update was at 01/11/2010 19:35:41
|
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/11/2010 19:37:50
|
anderson_lp789
JavaGuru
Membro desde: 19/06/2010 19:24:50
Mensagens: 206
Offline
|
humm entendi, acho que vou comprar este livro!
enfim com expressões regulares eu saberia se ele tentou consultar tabela que não existia, erros de sintaxe como: não fechamento de parameteses, aspas, uso errado do and, not, or e xor... e outras coisas mais?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/11/2010 19:43:26
|
thiago.filadelfo
Virtual Machine Man
![[Avatar]](/images/avatar/a0dabc6f2a8ea64b7fb210eec0175a02.jpg)
Membro desde: 07/07/2007 00:32:26
Mensagens: 579
Localização: São Paulo
Offline
|
Sim... pode ser feito isso!!
Basta usar esses parenteses... no exemplo que passei
REGEX: SELECT\s(\*|\w+)\sFROM\s(\w+);
Para expressao regular casa parenteses quer dizer um agrupamento.. dai se fizer assim
agrupamento 1 terá: * ou nome,sobrenome
agrupamento 2 terá: tabela <- quer dizer qual tabela esta querendo buscar...
Mas torna mais complexo a medida que for querendo mais detalhes da expressao (String - script)...
Espero que goste e até que sirva a dica...
Flwsss
|
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/11/2010 00:26:43
|
psevestre
JavaEvangelist
Membro desde: 13/05/2005 12:53:19
Mensagens: 432
Localização: São Paulo
Offline
|
anderson_lp789 wrote:gente estou a fazer um programa no qual o usuário pode escrever suas consultas no banco de dados, e eu preciso validar isso (sua sintaxe somente) tem algum parse que faz isso em java? alguém tem uma dica?
Que tal:
PreparedStatement st = conn.prepareStatement(stringPassadaPeloUsuario);
Se seu banco de dados suportar, este passo já irá validar a sintaxe da consulta SQL ou, se ela estiver errada, lançar uma exceção. RegEx só vai resolver os casos das consultas mais simples. Se for o seu caso, tudo bem, mas lembre-se de que cada banco tem funções próprias, extensões ao SQL, etc. Capturar e manter as expressões regulares provavelmente vai ser um pesadelo.
|
http://justaphilpicks.blogspot.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/11/2010 07:30:17
|
anderson_lp789
JavaGuru
Membro desde: 19/06/2010 19:24:50
Mensagens: 206
Offline
|
No meu caso não estou trabalhando com SGBD, e sim "montando" uma sintaxe para enviar ao um programa externo que trabalha com uma linguagem bem parecida com a SQL (só com algumas diferenças básicas como por exemplo a ausencia da clausula GROUP BY) então creio que REGEX seja a melhor saída... ou vc propõe outra alternativa?
This message was edited 1 time. Last update was at 03/11/2010 07:32:39
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/11/2010 07:54:42
|
psevestre
JavaEvangelist
Membro desde: 13/05/2005 12:53:19
Mensagens: 432
Localização: São Paulo
Offline
|
anderson_lp789 wrote:No meu caso não estou trabalhando com SGBD, e sim "montando" uma sintaxe para enviar ao um programa externo que trabalha com uma linguagem bem parecida com a SQL (só com algumas diferenças básicas como por exemplo a ausencia da clausula GROUP BY)
então creio que REGEX seja a melhor saída... ou vc propõe outra alternativa?
O melhor é vc. definir o subset SQL de maneira formal e usar uma ferramenta que gere o parser para vc. Veja o link abaixo para um exemplo de como isto pode ser feito em Java:
http://www.antlr.org/
Na página abaixo existem vários exemplos de gramáticas já criadas, inclusive de SQL:
http://www.antlr.org/grammar/list
This message was edited 1 time. Last update was at 03/11/2010 07:57:54
|
http://justaphilpicks.blogspot.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/11/2010 10:01:24
|
anderson_lp789
JavaGuru
Membro desde: 19/06/2010 19:24:50
Mensagens: 206
Offline
|
humm parece ser interessante, com a gramática definida como eu faço pra validar se está tudo correto...
por exemplo eu escrevo a consulta que eu quero, e vou validar ela como daih? não entendi isso.. vi alguns exemplos em C mas e em java? obrigado pela atenção e dica
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/11/2010 10:09:38
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline
|
anderson_lp789 wrote:gente estou a fazer um programa no qual o usuário pode escrever suas consultas no banco de dados, e eu preciso validar isso (sua sintaxe somente) tem algum parse que faz isso em java? alguém tem uma dica?
http://stackoverflow.com/questions/141499/any-java-libraries-out-there-that-validate-sql-syntax
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/11/2010 11:21:54
|
anderson_lp789
JavaGuru
Membro desde: 19/06/2010 19:24:50
Mensagens: 206
Offline
|
humm legal, vou ler todo o conteúdo. Qualquer coisa eu aviso! serve pra eu pegar idéias de como implementar, porém acho que vou fazer isso usando regex e idéias deste material que me passaste. Obrigado
|
|
|
 |
|
|