Pegar a query de um PreparedStatement

Olá a todos, suponhamos o seguinte codigo, com a conexão já aberta:

String campo = "a";
sql = "SELECT * FROM MINHATABELA WHERE CAMPO = ?";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, campo);

Existe alguma forma de eu recuperar a sql, com o ? já substituido pelo metodo setString(parameterIndex, x)?

dê um toString no stmt.

ele vai devolver uma linha inteira com uns valores do jdbc + a query montada

[quote=samirrolemberg]dê um toString no stmt.

ele vai devolver uma linha inteira com uns valores do jdbc + a query montada[/quote]

Não funcionou. Coloquei isso aqui:

System.out.println(stmt.toString());

E ele imprimiu:

Ola, isso vai depender se seu jdbc tem suporte a isso.
A muito tempo atras ja fiz isso com postgres. eu estava tentando recriar aqui mas não consegui.
serviria algo como: conn.nativeSQL ?

[quote=R$chieck]Ola, isso vai depender se seu jdbc tem suporte a isso.
A muito tempo atras ja fiz isso com postgres. eu estava tentando recriar aqui mas não consegui.
serviria algo como: conn.nativeSQL ?[/quote]

O que seria esse conn.nativeSQL?

Bom dia!

Pelo que vi seu sql retorna um objeto, entao crie um método com a assinatura do tipo Object e coloque seu preparedStatement
dentro desse metodo e utilize o retorno dele para recuperar seu sql com seu parametro já substituido. De uma verificada também em
CallableStatement. pode ser útil.

Att.

de uma olhada nisso:
http://dev.mysql.com/doc/refman/5.1/en/query-log.html
e talvez isso tambem possa ajudar:
http://javafree.uol.com.br/topic-8429-JDBC-Recuperando-SQL-de-PreparedStatement.html

São metodos diferentes, o primeiro é mais certo que va funcionar, eu já usei algo assim com postgres quando se tratava de um servidor, é interessante pois é possivel ver todas as sqls que foram executadas pelo sgbd

[quote]de uma olhada nisso:
http://dev.mysql.com/doc/refman/5.1/en/query-log.html
e talvez isso tambem possa ajudar:
http://javafree.uol.com.br/topic-8429-JDBC-Recuper…-SQL-de-PreparedStatement.html

São metodos diferentes, o primeiro é mais certo que va funcionar, eu já usei algo assim com postgres quando se tratava de um servidor, é interessante pois é possivel ver todas as sqls que foram executadas pelo sgbd[/quote]

Pelo o que eu entendi, o primeiro link ele funciona com o mysql (ele pega o log que o mysql gera). Infelizmente não estou usando MySQL (mas sim o Firebird).

O segundo link eu tentei mas ele imprimiu a query com os ? nele.

[quote]Bom dia!

Pelo que vi seu sql retorna um objeto, entao crie um método com a assinatura do tipo Object e coloque seu preparedStatement
dentro desse metodo e utilize o retorno dele para recuperar seu sql com seu parametro já substituido. De uma verificada também em
CallableStatement. pode ser útil.

Att.[/quote]

Não entendi direito como eu faria isso.

Mas vou dar uma olhada no JavaDoc a respeito do CallableStatement.