Tem como retornar a instrução sql sem os malditos '?'?

Galera,

Estou executando uma query da seguinte forma de maneira geral

    ManagedRdbConnection connection = null;
    PreparedStatement statement = null;
    ResultSet resultSet = null;
    ResultSetDataSet rsds = null;
    StringBuffer query = new StringBuffer();

     statement = connection.prepareStatement( query.toString() );

     resultSet = statement.executeQuery();
		
      rsds = new ResultSetDataSet( resultSet );
      resultSet.close();

até ai tudo bem, nao tenho duvidas quanto a esse procedimento.

Minha duvida está se por um acaso eu consigo atraves dos objetos instanciados
PreparedStatement statement = null;
ResultSet resultSet = null;
ResultSetDataSet rsds = null;

obter a intrução sql sem os “?” OU obter os parametros passados para esta query e depois substituir na mão?

Aguardo respostas…

Se não haver essa possibilidade me respondam tambem

Hmmm… essa ai eu nunca fiz, mas podemos dar uma estudada no método getParameterMetaData do objeto PreparedStatement, afinal, eh ele que preenche os “?”…

Uma coisa que costumo fazer para essa situação é imprimir o comando SQL e depois os parâmetros passados… da um pouco de trabalho montar tanto print… e o console pode ficar poluído para os leigos… mas se usar a classe Logger fica moleza ocultar do usuário.

Fui !

puts eh que tem vaaaarias classes de DAO aqui ai pra facilitar eu gostaria de obter os parametros em uma linha soh para não ter que alterar muito as classes entendeu.

quando eu utilizo a getParameterMetaData o meu java da excessao de

java.sql.SQLException: DSRA9010E: ‘getParameterMetaData()’ não é suportado na implementação do WebSphere java.sql.PreparedStatement.

axo que a versã que eu estou usando nao tem suporte para esse metodo

galera achei aki um metodo

statement.getConnection().nativeSQL(String args0)

sera que isso eh util de alguma forma para o meu problema?

Nao existe nada na API que faça isso. Aqui vai uma explicação legal, de um tal de Steve:

"[i]basically you build an sql string and submit it to the database.
then you add in your paramaters etc and submit it to the database…

the database parses and compiles the statement internally. ( or it may even
have a pre-parsed, pre-compiled previous version squirreled away(oracle))

if you want to see the sql “at the database end” after the statement has been
assembled, then you CAN use java, but you must query the database tools to do
it.[/i]"

Mas aqui tem a discussão completa, e uma saida ALTERNATIVA pra vc poder ver o resultado:

Simples como tudo em java(lol)

PreparedStatement statement = ...;
String sql = statement.toString();  //.toString() é a solução;

Pelo menos se eu me lembro bem é assim…

ve se funfa ae

Att
Ricoldi

É parece que tem que ser antes mesmo de mandar a query para o banco.

Vai ser trabalhoso mas…

vamos la uahsuahsuhas

Aham, acho que isso só vale para alguns drivers que expandem os PreparedStatements antes de mandá-los para o banco. Para os drivers dos bancos mais comuns (MS SQL Server, Oracle) isso provavelmente não deve valer, mas é questão de testar.