Dúvida com CallableStatement [RESOLVIDO]  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
von.juliano
GUJ Master
[Avatar]

Membro desde: 15/01/2007 13:31:32
Mensagens: 1266
Offline

Pessoal, quando uso CallableStatement, gostaria de poder logar a chamada da sp com dados que são passados para ela. Exemplo:


Não encontrei nada assim pronto, alguém já viu? Se não, alguém sabe como posso fazer isso?

Obrigado!

This message was edited 3 times. Last update was at 14/01/2008 10:12:16


É difícil manter-se religioso quando algumas pessoas simplesmente não são carbonizadas por raios!

Desenvolvendo software de forma simples! - http://vonjuliano.wordpress.com/
[Email] [WWW]
Pedrosa
JWizard
[Avatar]

Membro desde: 13/07/2005 13:08:08
Mensagens: 2505
Localização: São Paulo - Brasil
Offline

O que exatamente você precisa Juliano não entendi sua dúvida?
fabim
GUJ Master
[Avatar]

Membro desde: 14/12/2006 19:30:03
Mensagens: 1268
Localização: Vitoria - Espirito Santo
Offline

Pedrosa wrote:O que exatamente você precisa Juliano não entendi sua dúvida?


ele quer uma String que represente o SQL que será executado.

ειπεν αυτη ο ιησους εγω ειμι η αναστασις και η ζωη ο πιστευων εις εμε καν αποθανη ζησεται

Sun Certified Web Component Developer
Sun Certified Java Programmer
Sun Certified Java Associate
Sun Certified Business Component Developer - Em Andamento
Bacharelando em Sistemas de Informacao


[MSN]
fabim
GUJ Master
[Avatar]

Membro desde: 14/12/2006 19:30:03
Mensagens: 1268
Localização: Vitoria - Espirito Santo
Offline

http://www.javaworld.com/javaworld/jw-01-2002/jw-0125-overpower.html?page=1

This message was edited 1 time. Last update was at 10/01/2008 16:18:09


ειπεν αυτη ο ιησους εγω ειμι η αναστασις και η ζωη ο πιστευων εις εμε καν αποθανη ζησεται

Sun Certified Web Component Developer
Sun Certified Java Programmer
Sun Certified Java Associate
Sun Certified Business Component Developer - Em Andamento
Bacharelando em Sistemas de Informacao


[MSN]
Pedrosa
JWizard
[Avatar]

Membro desde: 13/07/2005 13:08:08
Mensagens: 2505
Localização: São Paulo - Brasil
Offline

Teste a solução acima Juliano, mas parece que é indicado somente em modo debug.

This message was edited 1 time. Last update was at 10/01/2008 16:28:08

fabim
GUJ Master
[Avatar]

Membro desde: 14/12/2006 19:30:03
Mensagens: 1268
Localização: Vitoria - Espirito Santo
Offline

Pedrosa wrote:É Possivel obter sem jogar os ? e setando os valores, que eu saiba daria para fazer assim:



Essa String só deve obter os valores no driver via getAlguma coisa, o que foge do alcance, ou estou falando besteira?


Isso quebraria o principal beneficio de se setar os parametros sem precisar esquentar a cabeça com aspas ou com datas.

ειπεν αυτη ο ιησους εγω ειμι η αναστασις και η ζωη ο πιστευων εις εμε καν αποθανη ζησεται

Sun Certified Web Component Developer
Sun Certified Java Programmer
Sun Certified Java Associate
Sun Certified Business Component Developer - Em Andamento
Bacharelando em Sistemas de Informacao


[MSN]
von.juliano
GUJ Master
[Avatar]

Membro desde: 15/01/2007 13:31:32
Mensagens: 1266
Offline

Eu preciso executar o seguinte procedimento:
- Obter o CallableStatement à partir da String que contém a chamada da sp: - Setar os respectivos valores: - E aqui está o meu problema, de alguma forma eu preciso pegar do CallableStatement a String que é a chamada da sp, já com os valores setados, o que, suponho, seria algo + ou - assim:
O pessoal aqui pediu isso p/ poder logar essa informação.

É difícil manter-se religioso quando algumas pessoas simplesmente não são carbonizadas por raios!

Desenvolvendo software de forma simples! - http://vonjuliano.wordpress.com/
[Email] [WWW]
von.juliano
GUJ Master
[Avatar]

Membro desde: 15/01/2007 13:31:32
Mensagens: 1266
Offline

fabiocsi wrote:
Pedrosa wrote:É Possivel obter sem jogar os ? e setando os valores, que eu saiba daria para fazer assim:



Essa String só deve obter os valores no driver via getAlguma coisa, o que foge do alcance, ou estou falando besteira?


Isso quebraria o principal beneficio de se setar os parametros sem precisar esquentar a cabeça com aspas ou com datas.

Sem dúvidas. Fazer assim está fora de questão.

Tb creio que isso esteja à cargo do driver, a dúvida é, como alcançar essa informação???

É difícil manter-se religioso quando algumas pessoas simplesmente não são carbonizadas por raios!

Desenvolvendo software de forma simples! - http://vonjuliano.wordpress.com/
[Email] [WWW]
von.juliano
GUJ Master
[Avatar]

Membro desde: 15/01/2007 13:31:32
Mensagens: 1266
Offline


Obrigado pelo artigo fabiocsi, vou ver se consigo resolver com ele, e se conseguir (tomara! ) coloco a solução aqui!

É difícil manter-se religioso quando algumas pessoas simplesmente não são carbonizadas por raios!

Desenvolvendo software de forma simples! - http://vonjuliano.wordpress.com/
[Email] [WWW]
oyama
Virtual Machine Man

Membro desde: 19/04/2005 10:11:09
Mensagens: 572
Offline

Como é só para log, acho que voce poderia tentar usar um wrapper para o driver de banco de dados do tipo do p6spy.
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

A razão pela qual o Java não define um método para visualizar a string resultante da substituição dos parâmetros no SQL é que muitas vezes ela não ocorre (pelo menos para os bancos de dados Oracle ou MS SQL Server).
Em vez disso, os parâmetros são mandados em forma binária e o servidor SQL pega esses dados, assim como a string com os "?", verifica se a string existe em um cache de queries e procedures compiladas, e monta tudo.
Eu sei que isso é bom para depuração, mas se você realmente precisa disso, é necessário usar algo que intercepte esses parâmetros, como o tal do p6spy.

[WWW]
Yky Mattshawn
Virtual Machine Man
[Avatar]
Membro desde: 18/12/2006 03:34:14
Mensagens: 651
Localização: São Sebastião do Caí / RS
Offline

Assim como o thingol falou, a recuperação dessa String não ocorre porque ela é processada totalmente pelo servidor.

Exemplo: MySQL. Claro que o driver executa as operações em modo binário, mas vejam: já usaram PreparedStatement's reais do MySQL?

São assim:



Notem que em nenhum momento existiu realmente uma instrução pronta com os valores. A instrução executada pelos PreparedStatement's é resolvida diretamente no servidor. Então, mesmo que o driver para o banco executasse tudo enviando String's de comandos (ou seja, nada em modo binário), ainda assim a instrução nunca existiria.

This message was edited 2 times. Last update was at 11/01/2008 10:50:15



Yky Mattshawn [ Compusoft - Desenvolvimento de Sistemas Empresariais ]
"Tudo que é ortodoxo ou heterodoxo demais gera heresia."
Bixo 2010 - Ciência da Computação - Feevale/RS e Unisinos/RS
[Email] [MSN] [ICQ]
von.juliano
GUJ Master
[Avatar]

Membro desde: 15/01/2007 13:31:32
Mensagens: 1266
Offline

oyama wrote:Como é só para log, acho que voce poderia tentar usar um wrapper para o driver de banco de dados do tipo do p6spy.

Obrigado pela sugestão, mas creio que não posso usar o p6spy. Suponho que seja um jar (ou não? Não consegui baixar pq o link do download está fora!), e devido à restrições no cliente não posso adicionar qualquer jar no projeto. Tenho que usar até mesmo versões do Struts e do iText pré-definidas!

Acho que o link que o fabiocsi passou é a melhor solução, assim que terminar de implementar posto aqui! Obrigado à todos!

É difícil manter-se religioso quando algumas pessoas simplesmente não são carbonizadas por raios!

Desenvolvendo software de forma simples! - http://vonjuliano.wordpress.com/
[Email] [WWW]
von.juliano
GUJ Master
[Avatar]

Membro desde: 15/01/2007 13:31:32
Mensagens: 1266
Offline

thingol wrote:A razão pela qual o Java não define um método para visualizar a string resultante da substituição dos parâmetros no SQL é que muitas vezes ela não ocorre (pelo menos para os bancos de dados Oracle ou MS SQL Server).
Em vez disso, os parâmetros são mandados em forma binária e o servidor SQL pega esses dados, assim como a string com os "?", verifica se a string existe em um cache de queries e procedures compiladas, e monta tudo.
Eu sei que isso é bom para depuração, mas se você realmente precisa disso, é necessário usar algo que intercepte esses parâmetros, como o tal do p6spy.


Yky Mattshawn wrote:Assim como o thingol falou, a recuperação dessa String não ocorre porque ela é processada totalmente pelo servidor.

Exemplo: MySQL. Claro que o driver executa as operações em modo binário, mas vejam: já usaram PreparedStatement's reais do MySQL?

São assim:



Notem que em nenhum momento existiu realmente uma instrução pronta com os valores. A instrução executada pelos PreparedStatement's é resolvida diretamente no servidor. Então, mesmo que o driver para o banco executasse tudo enviando String's de comandos (ou seja, nada em modo binário), ainda assim a instrução nunca existiria.

Obrigado pela aula pessoal! :thumbup:
[Email] [WWW]
von.juliano
GUJ Master
[Avatar]

Membro desde: 15/01/2007 13:31:32
Mensagens: 1266
Offline

Pessoal, consegui resolver com o site http://www.javaworld.com/javaworld/jw-01-2002/jw-0125-overpower.html?page=1 que o fabiocsi passou, não vou colocar como ficou aqui pq tem mais de 800 linhas (a classe tem que implementar a interface CallableStatement, são mais de 150 métodos! ), mas com uma rápida lida no site ninguém vai ter dificuldades para implementar a solução!

Obrigado à todos!

É difícil manter-se religioso quando algumas pessoas simplesmente não são carbonizadas por raios!

Desenvolvendo software de forma simples! - http://vonjuliano.wordpress.com/
[Email] [WWW]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team