Pegar a query de um PreparedStatement

7 respostas
S

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)?

7 Respostas

samirrolemberg

dê um toString no stmt.

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

S

samirrolemberg:
dê um toString no stmt.

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

Não funcionou. Coloquei isso aqui:

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

E ele imprimiu:

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 ?

S

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 ?

O que seria esse conn.nativeSQL?

ManoJava

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.

R_chieck

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

S

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

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.

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.

Não entendi direito como eu faria isso.

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

Criado 24 de maio de 2012
Ultima resposta 24 de mai. de 2012
Respostas 7
Participantes 4