Как увидеть строку PreparedStatement SQL?

Когда мы создаем PreparedStatement, мы используем '?' чтобы заменить их заданными параметрами.

Как мы можем увидеть окончательную строку SQL после того, как эти параметры установлены?

Ответ 1

Самый простой способ (который работает с любым драйвером JDBC) - использовать log4jdbc. Это прокси-сервер, который обертывает драйвер, создает читаемую строку SQL, комбинируя SQL и ее параметры и записывая ее в журнал, затем передает SQL и параметры на базовый драйвер.

Ответ 2

Нет окончательной строки SQL, версия с заполнителями - это то, что фактически отправлено на сервер. Данные отправляются полностью отдельно от него при выполнении запросов в подготовленном операторе.

Вы можете записать строку с заполнителями, а затем каждый набор данных по отдельности.

Ваш код мог бы объединить их в журнале с фактической строкой SQL, если это вам нужно:

String query = "SELECT a FROM b WHERE c = ?";

...

pstmt.setString(1, "asd");
logSQL( query, "asd");

logSQL тогда будет фактически log "SELECT a FROM b WHERE c = 'asd'". Может быть, кто-то действительно реализовал это раньше...