Je souhaite implémenter la consignation de toutes les instructions exécutées avec des paramètres de liaison réels lors de l'utilisation de Oracle JDBC. Et je préférerais que je puisse créer une telle méthode de journalisation en passant l'objet PreparedStatement en paramètre.Comment obtenir les valeurs des paramètres de liaison à partir de l'objet Oracle JDBC PreparedStatement
Par exemple, j'ai créé PreparedStatement et ont lié un paramètre
PreparedStatement ps = conn.prepareStatement(
"SELECT * FROM employees WHERE employee_id = ?");
ps.setInt(1,1);
Maintenant, je voudrais être en mesure d'obtenir de ps l'instruction SQL réelle « SELECT * FROM employés OÙ employe_id = 1 » que je pouvais mettre dans le fichier journal.
Jusqu'à présent, je trouve que je peux utiliser
((oracle.jdbc.driver.OracleStatement) ps).getOriginalSql()
pour obtenir
SELECT * FROM employees WHERE employe_id = ?
Maintenant, je besoin d'un moyen d'obtenir la liste des variables de liaison en cours de ps pour que je puisse remplacer? avec des valeurs de paramètre de liaison.
J'ai essayé de regarder dans ps.getClass(). GetDeclaredFields() et ps.getClass(). GetSuperclass(). GetDeclaredFields() mais jusqu'à présent n'a pas pu trouver l'endroit où les valeurs des paramètres de liaison et leurs types sont stockés .
Des suggestions où les chercher?
Je dois encore le générer à partir de PreparedStatement. J'ai besoin de ceci pour une bibliothèque où j'ajoute le support d'Oracle en plus de MySQL et de PostgreSQL et d'autres bases de données et là la fonction de notation accepte juste l'objet PreparedStatement comme argument. Dans les pilotes JDBC MySQL et PostgreSQL, si vous appelez toString() sur l'objet PreparedStatement, il renvoie SQL avec les paramètres de liaison inclus. J'ai besoin d'implémenter des fonctionnalités similaires pour Oracle. –
Alors peut-être changer la bibliothèque elle-même pour fonctionner de cette façon aussi? Autre que cela, commencez à déboguer votre code oracle et rompez sur l'instruction préparée. Ensuite, regardez la structure et localisez l'endroit privé où elle stocke les valeurs. – akarnokd
Ce problème ressemble à un ORM. – ATorras