【问题标题】:How could I log the sql query (with the actual parameters) in java + Spring如何在 java + Spring 中记录 sql 查询(使用实际参数)
【发布时间】:2013-11-21 08:31:54
【问题描述】:

如何在 java + Spring 中记录 sql 查询(使用实际参数)。

我的开发环境

  1. Java
  2. Spring JdbcTemplate。

让我详细说明这个问题。

我的伪代码是这样的。

String sql = "SELECT COLUMN1 FROM MYTABLE WHERE COLUMN2=? "
List<MyVO> MyVOList = getJdbcTemplate().query(sql, new Object[] { date }, 
                           new RowMapper...

现在,如果我想记录 sql - 使用发送给它的实际日期 - 我不知道该怎么做。

选项 1: 我总是可以单独记录 SQL 并记录参数,但我希望在日志中包含实际的 SQL,以便支持人员可以复制粘贴 SQL 并从中运行它如果需要,可以使用 SQL 客户端。

选项 2: 我可以考虑做一个字符串替换并在 java 中创建 SQL,然后记录它。但是,这总是会因为一些怪异的编码错误而导致实际 SQL 和记录的 SQL 不同的可能性。

是否有人尝试解决此问题并取得任何进展?

请分享。谢谢。

注意:我已经阅读了Log SQL that is communicated with the database 的帖子。使用此解决方案不是我的选择。我在企业设置中工作,而 jdbcdslog-exp 不在批准的软件列表中。

【问题讨论】:

  • 我以为我已经澄清了我没有使用 Hibernate @CHowdappaM
  • 因此,您需要自己编写解决方案,而不是使用现成的框架。以其他方式说服他们,可以节省您的时间和挫败感。
  • 嗯 - 目前我只是在查看这个论坛,看看是否有一个简单的解决方案 - 在我的限制范围内工作。如果不得不破解我自己的解决方案,我会回去说不。但在此之前,我只想做我的尽职调查。

标签: java spring logging


【解决方案1】:

【讨论】:

  • 谢谢,这很好。但这仍然不能解决我原来的问题,即使用值替换记录完整的 sql,以便支持人员 - 如果需要,可以从日志中复制 SQL 并在 SQL 客户端上运行,而无需进行任何转换。
  • @partha 然后尝试面向方面的方法:gotoquiz.com/web-coding/programming/java-programming/…
【解决方案2】:

JdbcTemplate.query() 方法最终调用执行方法。 下面是 JdbcTemplete spring 类中的执行方法。 扩展此类并记录 this.val$sql 这可能会满足您的需求。

public void execute(String sql) throws DataAccessException {
    if (this.logger.isDebugEnabled()) {
        this.logger.debug("Executing SQL statement [" + sql + "]");
    }

    execute(new StatementCallback(sql) {
        public Object doInStatement(Statement stmt) throws SQLException {
            stmt.execute(this.val$sql);
            return null;
        }

        public String getSql() {
            return this.val$sql;
        }
    });
}

【讨论】:

    猜你喜欢
    • 2015-02-07
    • 2020-02-27
    • 2018-06-27
    • 1970-01-01
    • 2018-01-02
    • 1970-01-01
    • 1970-01-01
    • 2023-02-14
    • 2021-09-03
    相关资源
    最近更新 更多