当前位置: 首页 > 知识库问答 >
问题:

在使用Spring的JDBCTemplate时,如何获取PreparedStatement查询字符串?

马煌
2023-03-14

我使用的是Spring的JdbcTemplate(Spring版本4.1.4)。对于我的类“JdbcTemplate”实例,我正在将select查询作为一个准备好的语句。但是,我的查询意外地没有返回任何结果。因此,我确实需要调试我的查询,并确保查询是我期望的。

如何取回作为< code>JdbcTemplate的内部< code>PreparedStatement的一部分对数据库执行的实际SQL?

我熟悉使用预制语句的 toString() 方法来实现这一点,但是由于 JDBCTemplate 在内部使用预制语句,我不确定使用 Spring 的可行性如何。

我正在使用的一些示例代码如下:

private static final String PREPARED_QUERY =
    "select\n" +
        "  spm.amount\n" +
        "from\n" +
        "  search_price_modifier spm\n" +
        "where\n" +
        "  spm.search_id = ?\n" +
        "  and spm.search_date > to_date(?, 'MM-DD-YYYY HH24:MI:SS')\n" +
        "  and spm.search_date < to_date(?, 'MM-DD-YYYY HH24:MI:SS')\n";

public void runQuery(String searchId, String strSearchDateInfimum,
    String strSearchDateSupremum) {

  SqlRowSet amounts = this.jdbcTemplate.queryForRowSet(
      PREPARED_QUERY_FOR_FLAT_MARKUP_VERIFICATION,
      searchId, strSearchDateInfimum, strSearchDateSupremum);
  while (amounts.next()) {
    float amount = amounts.getFloat("AMOUNT");
    LOGGER.debug("amount=" + amount);
  }
}

共有1个答案

贡光明
2023-03-14

我将给出一种通用方法来调试您的所有语句,并在您需要时在控制台中查看它们,因为Spring默认情况下会将其添加到您的类路径中

此类发出的所有 SQL 都记录在与模板实例的完全限定类名(通常是 JdbcTemplate,但如果您使用的是 JdbcTemplate 类的自定义子类)相对应的类别下的 DEBUG 级别。

log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration >
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </Console>
    </Appenders>
    <Loggers>
        <Root level="error">
            <AppenderRef ref="Console" />
        </Root>
        <Logger level="debug" name="org.springframework.jdbc">
            <AppenderRef ref="Console" />
        </Logger>
    </Loggers>
</configuration>

添加到您的lib<code>log4j-api-2.5.jar<code><code>log4j-core-2.2.jar

开关关闭调试更改级别

        <Logger level="error" name="org.springframework.jdbc">
            <AppenderRef ref="Console" />
        </Logger>

现在spring不会调试,但只打印错误

 类似资料:
  • 问题内容: 我正在尝试连接到数据库,运行查询并打印出查询。到目前为止,我已经完成了工作,但是我需要获取输出并将其中的特定部分分配给 我正在使用log4jdbc监视我的查询。 此刻,我得到如下记录的输出: 我想分配给。我该怎么做呢? 问题答案: 通常,a 将为您提供查询(包括绑定参数)。但这取决于的实际实现(例如,使用PostgreSQL隐式实现)。 您提到为您带来回报。我对 log4jdbc 并不

  • 问题内容: 从Flask文档中关于如何获取查询字符串的信息并不明显。 所以 问题答案:

  • 我有问题,需要帮助。 问题是我正在尝试使用 jdbctemplate 和映射获取查询的结果,该结果导致我的 File 类。 我的类文件包含3O个属性:10个长、字符串和日期类型的属性。 我正在执行的查询: 当执行查询时,它不会给我一个错误,一切都是正确的,但是当显示结果时,列出来为空,错误是由于我使用的查询使用别名,别名与File类的属性名称不匹配。 这就是我的问题或查询,因为我不能更改类属性的名

  • 问题内容: 我试图用Java创建一个简单的HttpServer来处理GET请求,但是当我尝试获取请求的GET参数时,我注意到HttpExchange类没有用于该方法的方法。 有人知道读取GET参数(查询字符串)的简单方法吗? 这是我的处理程序的样子: ..和主要方法: 问题答案: 下列: 将返回类似于以下格式的字符串: 因此您可以自己简单地解析字符串,这就是解析函数的样子: 这就是您可以使用它的方

  • 问题内容: 是否有通过jQuery(或不通过jQuery)检索[查询字符串]值的无插件方法? 如果是这样,怎么办?如果没有,是否有可以做到的插件? 问题答案: const urlParams = new URLSearchParams(window.location.search); const myParam = urlParams.get(‘myParam’); 原版的 为此,您不需要jQue

  • 问题内容: 我有这样的网址: 我需要做的是在符号(查询字符串)后获取详细信息-即。如何使用JavaScript来获得? 到目前为止,我所做的是: 我不知道下一步该怎么做。 问题答案: 看一看的MDN文章有关。 QueryString在中可用。 同样适用于旧版浏览器的解决方案 MDN提供了一个如何获取QueryString中可用的单个键的值的示例在以上引用的文章中不再提供 。像这样: 在现代浏览器中