gpt4 book ai didi

java - 在 postgres jdbc 驱动程序中记录准备好的 sql 语句

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:21:15 24 4
gpt4 key购买 nike

我想在我的 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)
...

有没有办法只记录语句+参数?

最佳答案

您很幸运,您使用的是 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 或其他东西)

关于java - 在 postgres jdbc 驱动程序中记录准备好的 sql 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7195855/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com