Bom dia, amigos…
Minha dúvida é a seguinte… preciso recuperar a SQL a partir de um PreparedStatement ou de uma Connection.
Ex.: tenho todas minhas SQLs neste padrão:
e depois faço o seguinte:
ppst.setString (1, "%A%");
ppst.setInt (2, 50);
tem alguma forma de, após setar os valores, eu recuperar a seguinte SQL?:
preciso dessa SQL pois ela é passada como parâmetro para um subrelatório
Obs.: Por um motivo um pouco complicado de explicar, não me adiantaria passar um DataSource ao invés de uma SQL para o subrelatório… eu preciso da query mesmo…
Você pode tentar com um toString, mas a query vem zuada
ou sobrescreve a classe do PreparedStatement e reescreve o método toString para retornar apenas o SQL
acho que não tem outro jeito de pegar a query dele, pelo menos eu desconheço.
erico_kl
obrigado zoren…
fiz uns testes com o toString() e o único detalhe que eu tenho que ajeitar é na hora de passar o parâmetro… pois como a SQL vai ser executada fora do PreparedStatement eu preciso fazer o seguinte:
e dessa forma (com os apóstrofos) ele me retorna a query certo…
não cheguei a fazer testes com SQLs mais complexas… mas acredito que a única alteração seja na hora de passar o parâmetro mesmo…
você teria algum exemplo onde a SQL poderia vir mais zuada utilizando toString()?
obrigado mais uma vez…
zoren
Eu não lembro direito, mas ele mostrava o nome da classe@query
vc não pode passar para o PreparedStatement os apostrofos, ele vai dar erro;
erico_kl
vai dar erro se eu tentar executar a SQL a partir do PreparedStatement e não na hora de setar o valor…
neste caso em específico, eu só preciso da PreparedStatement pra dar os replaces nos ? e então jogar a query para o subrelatório… tanto que eu poderia fazer esses replaces no braço… mas aí é gambiarra
zoren
se vc n executar o prepared statement, não haverá problemas qto o apostrofo.
mas acho q isso é mais gambi que fazer replace
erico_kl
por que?
utilizando o ppst eu resolvo em pouquíssimas linhas e se eu der os replaces no braço eu teria que fazer uma classe que controle isso (quantidade de interrogações, tipos de cada valor, ordem dos replaces…)
eu preciso da SQL só pra mandar para o subrelatório, e ela é executada lá…
zoren
não precisa fazer uma classe, é só usar StringFormat.