prepareStatement getQuery() ou getSQL()

1 resposta
landir

Eu não sei se alguem aqui já precisou imprimir a sql completa com as interrogações (?) substituídas , como

sql = "select nome from tabela where id=?"
PreparedStatement p; 
p = conn.prepareStatement( sql );
stm.setInt(1, 15);

Se eu quizer ver o que a sql assim:

System.out.println( "SQL : " + p.getQuery() );

ou

System.out.println( "SQL : " + p.getSQL() );

saída:

select nome from tabela where id=15

Como eu faria, alguém tem alguma sugestão, eu já procurei no google, e na API, mas não encontrei nenhum método que retorna isso. :cry:

Eu não queria ter que imprimir todos os valores como:

System.out.println("sql: "+ sql + 15);

1 Resposta

T

A razão para não existir um método que retorna a SQL montada para você é que normalmente o driver não monta a string SQL; em vez disso, manda só uma string com os “?” - quase como na definição do JDBC, e os parâmetros são enviados por algum protocolo proprietário do banco de dados (no caso do MS SQL Server, via RPC, e em formato binário). Isso é bem mais rápido que montar tudo e pedir para o servidor de banco de dados interpretar (“parsear”) tudo, mas tem esse inconveniente de não ter a string SQL montada para você debugar ou então para re-executar o comando SQL em caso de problemas.

Existe um método que retorna uma string SQL (só fuçar o javadoc), mas não faz o que você quer, porque ele só converte o SQL padrão JDBC para o SQL esperado para o banco de dados suportado pelo driver JDBC.

Criado 5 de janeiro de 2005
Ultima resposta 5 de jan. de 2005
Respostas 1
Participantes 2