2010-10-05 6 views
0

Y at-il un moyen d'obtenir la requête Oracle de PreparedStatement. Je sais que ce n'est pas possible en tant que tel je ne peux pas utiliser log4jdbc ou p6spy car il s'agit d'une application sécurisée Ne travaillez pas comme j'utilise Oracle? Je ne peux pas non plus modifier PreparedStatement en Statement.Requête de PreparedStatement

+0

Si vous ne pouvez pas modifier le code et ne pas mettre à jour la configuration pour utiliser log4jdbc, comment allez-vous accéder aux instructions préparées? – Thilo

Répondre

2

Si seulement besoin de temps de débogage, vous pouvez utiliser DebuggableStatement suivre cette article

+0

oui, mais cela l'obligerait à changer tous les endroits où les états sont préparés. Je suppose qu'il ne peut pas faire cela (pourquoi pas, d'ailleurs?). – Thilo

+0

Non, je peux le faire :) Merci quand même – Harish

1

Je ne pense pas que vous devriez le faire de cette façon, car il n'y a pas d'API officiellement documenté pour cela.

Si vous pouvez jouer avec le code, pourquoi ne pouvez-vous pas utiliser log4jdbc? Oracle JDBC aussi supports java.util.logging, que vous pourriez essayer d'activer.

Si vous êtes uniquement intéressé par le SQL lui-même, vous pouvez activer le suivi de session sur le serveur Oracle.

Ou peut-être vous pouvez mettre votre code à l'endroit où l'instruction est préparée (en utilisant quelque chose comme @pinichi suggère)?

Mais juste pour le plaisir, farfouillé avec le débogueur, avec ma version d'Oracle JDBC, je peux faire

if (stmt instanceof oracle.jdbc.driver.OraclePreparedStatement) { 
     String x = ((oracle.jdbc.driver.OraclePreparedStatement) stmt) 
      .getOriginalSql(); 
     System.out.println(x); 
    } 
+0

Cela ne fonctionne pas au moins avec Oracle 10g, imprime toujours le? – dchucks

+0

Quel est le problème avec l'impression du "?" ? C'est la requête qu'Oracle voit (avec peut-être? Remplacé par: 1). Qu'espériez-vous d'autre? – Thilo

+0

Ummm comme la question d'origine je m'attends à ce que le SQL modifié (? Remplacé par l'ensemble de paramètres) autrement appeler toString() sur PreparedStatement aurait suffi. – dchucks

Questions connexes