我想在我的java应用程序中记录所有准备好的sql语句。我正在使用标准的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)
...
有没有办法只记录语句+参数?
答案 0 :(得分:7)
你很幸运,你正在使用PostgreSQL。 PostgreSQL JDBC驱动程序的PreparedStatement
实现(至少从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或其他东西)