У меня есть общий метод Java со следующей сигнатурой метода:
private static ResultSet runSQLResultSet(String sql, Object... queryParams)
Он открывает соединение, создает PreparedStatement
с помощью оператора sql и параметров в массиве переменной длины queryParams
, запускает его, кэширует ResultSet
(в CachedRowSetImpl
), закрывает соединение и возвращает кэшированный набор результатов.
У меня есть обработка исключений в методе, который регистрирует ошибки. Я записываю SQL-оператор как часть журнала, так как он очень полезен для отладки. Моя проблема заключается в том, что запись в строковую переменную sql
регистрирует оператор шаблона с? Вместо фактических значений. Я хочу записать фактический оператор, который был выполнен (или попытался выполнить).
Итак ... Есть ли способ получить фактический оператор SQL, который будет выполняться PreparedStatement
? ( Без создания его самостоятельно. Если я не смогу найти способ доступа к PreparedStatement's
SQL, я, вероятно, в конечном итоге сам создам его в моих catch
es.)