Регистрация подготовленных операторов SQL в драйвере Postgres JDBC - PullRequest
6 голосов
/ 25 августа 2011

Я хочу записать все подготовленные операторы SQL в моем Java-приложении.Я использую стандартный драйвер postgres jdbc org.postgresql.Driver.Этот драйвер имеет параметр «loglevel», который может быть установлен в 1 (INFO) или 2 (DEBUG).Дело в том, что если для параметра задано значение 1, то оно почти ничего не записывает, если для параметра 2 оно отслеживается слишком похоже на

...
20:59:05.608 (2)  FE=> Bind(stmt=null,portal=null,$1=<'5'>,$2=<'13'>)
20:59:05.609 (2)  FE=> Describe(portal=null)
20:59:05.609 (2)  FE=> Execute(portal=null,limit=1)  
20:59:05.609 (2)  FE=> Sync
20:59:05.648 (2)  <=BE ParseComplete [null]
20:59:05.649 (2)  <=BE BindComplete [null]
20:59:05.649 (2)  <=BE NoData
20:59:05.649 (2)  <=BE CommandStatus(UPDATE 1)
...

Есть ли способ записывать только операторы + параметры?

1 Ответ

7 голосов
/ 25 августа 2011

Вам повезло, что вы используете PostgreSQL.Реализация PreparedStatement драйвера PostgreSQL JDBC (по крайней мере, начиная с версии 8.x или чего-то еще) имеет toString(), переопределенную таким образом, чтобы вы могли видеть весь оператор SQL со всеми параметрами, заполненными справа.мест.Таким образом, вы можете просто сделать что-то вроде:

preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, value1);
preparedStatement.setString(2, value2);
// ...
logger.debug(preparedStatement); // Will show entire SQL with all values.

(где logger это просто ваш регистратор, например, slf4j / logback или что-то еще)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...