❓ Как при работе с JDBC настроить логирование SQL запросов?
При использовании ORM на этапе разработки, часто возникает необходимость посмотреть какой именно SQL запрос генерируется для отправки в БД, чтобы вовремя обнаружить ошибки и сравнить ожидаемый запрос с реальным
Желательно, чтобы параметры уже были подставлены для сгенерированного SQL запроса, чтобы можно было его скопировать и используя, например — DBeaver, DataGrip, pgAdmin, отправить и посмотреть на результат, либо более детально его проанализировать
🪞 Hibernate имеет свойства show_sql, format_sql, highlight_sql, позволяющие выводить сгенерированный ORM’ом SQL запрос в форматированном виде
Если добавить логгер — org.hibernate.orm.jdbc.bind: trace, то мы увидим еще и параметры, но в нужное место в запросе нам придется подставлять их самостоятельно
❓ Какие есть еще варианты?
На картинке отображается пример логов при выполнении SQL запроса из примера на 🐙Github. На консоль выводится:
1⃣ Connection URL с дополнительными параметрами
2⃣ SQL запрос с подставленными параметрами
3⃣ ResultSet в виде таблицы, как результат выполнения запроса
4⃣ Json объект, как результат сбора информации из ResultSet’a в сущность
Для получения таких, либо похожих логов, есть несколько инструментов:
1⃣ log4jdbc — proxy для JDBC драйвера. Логирует SQL запрос с подставленными параметрами и время его выполнения. Пример доступен на 🐙Github
2⃣ log4jdbc-remix — форк log4jdbc проекта, добавляющий тот самый вывод ResultSet'a в виде таблицы. Был переименован в log4jdbc-log4j2 как его продолжение, но на данный момент заброшен. Пример доступен на 🐙Github
3⃣ p6spy — более масштабный проект, позволяющий добавлять свои formatter'ы, настраивается более гибко через spy.properties. Пример доступен на 🐙Github
4⃣ datasource-proxy — особых преимуществ над стандартными средствами Hibernate не заметил, но свою задачу выполняет. Пример доступен на 🐙Github
#sandbox_java_database_tools
➿ Меню
➿ Подпишись: @developer_sandbox
При использовании ORM на этапе разработки, часто возникает необходимость посмотреть какой именно SQL запрос генерируется для отправки в БД, чтобы вовремя обнаружить ошибки и сравнить ожидаемый запрос с реальным
Желательно, чтобы параметры уже были подставлены для сгенерированного SQL запроса, чтобы можно было его скопировать и используя, например — DBeaver, DataGrip, pgAdmin, отправить и посмотреть на результат, либо более детально его проанализировать
🪞 Hibernate имеет свойства show_sql, format_sql, highlight_sql, позволяющие выводить сгенерированный ORM’ом SQL запрос в форматированном виде
Если добавить логгер — org.hibernate.orm.jdbc.bind: trace, то мы увидим еще и параметры, но в нужное место в запросе нам придется подставлять их самостоятельно
❓ Какие есть еще варианты?
На картинке отображается пример логов при выполнении SQL запроса из примера на 🐙Github. На консоль выводится:
1⃣ Connection URL с дополнительными параметрами
2⃣ SQL запрос с подставленными параметрами
3⃣ ResultSet в виде таблицы, как результат выполнения запроса
4⃣ Json объект, как результат сбора информации из ResultSet’a в сущность
Для получения таких, либо похожих логов, есть несколько инструментов:
1⃣ log4jdbc — proxy для JDBC драйвера. Логирует SQL запрос с подставленными параметрами и время его выполнения. Пример доступен на 🐙Github
2⃣ log4jdbc-remix — форк log4jdbc проекта, добавляющий тот самый вывод ResultSet'a в виде таблицы. Был переименован в log4jdbc-log4j2 как его продолжение, но на данный момент заброшен. Пример доступен на 🐙Github
3⃣ p6spy — более масштабный проект, позволяющий добавлять свои formatter'ы, настраивается более гибко через spy.properties. Пример доступен на 🐙Github
4⃣ datasource-proxy — особых преимуществ над стандартными средствами Hibernate не заметил, но свою задачу выполняет. Пример доступен на 🐙Github
#sandbox_java_database_tools
➿ Меню
➿ Подпишись: @developer_sandbox