191 votes

Requête en retire java.sql.PreparedStatement

Dans mon code que j’utilise `` .

J’ai ensuite exécuter la `` méthode pour remplir les caractères génériques de l’instruction préparée.

Y a-t-il un moyen pour moi de récupérer (et imprimer) la requête finale avant la `` méthode est appelée et la requête est exécutée ? J’ai juste cette envie pour des fins de débogage.

Merci.

193voto

BalusC Points 498232

Ce n'est nulle part défini dans l'API JDBC contrat, mais si vous avez de la chance, le pilote JDBC en question peut renvoyer le SQL complète simplement en appelant PreparedStatement#toString(). I. e.

System.out.println(preparedStatement);

De mon expérience, ceux qui sont au moins l'PostgreSQL 8.x et MySQL 5.x les pilotes JDBC. Pour le cas de votre pilote JDBC ne le supporte pas, votre meilleur pari est d'utiliser une déclaration wrapper qui enregistre tous setXxx() méthodes et enfin remplit une chaîne SQL sur toString() basé sur les informations enregistrées. Par exemple Log4jdbc ou l'ancien et bien connu P6Spy.

31voto

Rich Adams Points 10378

Vous pourriez essayer d’appeler `` sur l’instruction préparée après que vous avez défini les valeurs de bind.

Cela fonctionne lorsque vous utilisez le pilote JDBC MySQL, mais je ne sais pas si elle sera dans les autres cas. Vous devrez peut-être garder une trace de toutes les liaisons que vous faites et puis de les imprimez.

L’échantillon sortie par dessus de code.

26voto

qwertzguy Points 1021

Pour ceux d'entre vous qui cherchent une solution pour Oracle, j’ai fait une méthode à partir du code de Log4Jdbc. Vous devrez fournir la requête et les paramètres passés à la classe preparedStatement extrayant d’elle étant un peu de douleur :

12voto

sproketboy Points 1821

Vous pouvez ajouter log4jdbc à votre projet. Cela ajoute la journalisation des commandes sql comme ils exécutent + beaucoup d’autres informations.

http://code.google.com/p/log4jdbc/wiki/FAQ

4voto

starryknight64 Points 101

Un peu d’un hack, mais il fonctionne très bien pour moi :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X