【发布时间】:2018-03-07 07:16:01
【问题描述】:
我正在使用 NamedParameterJdbcTemplate 将参数传递给 Query。但是我正在获取跟踪详细信息作为警告并且没有显示参数绑定。主要问题是它显示了正在执行的 sql,但我希望参数也是它的一部分,但只有?(问号)出现。在警告绑定发生并且执行之后很好,但绑定在日志中不可见。请帮我检查一下。
列索引1,参数值[mike],值类 [java.lang.String],SQL 类型未知 列索引 2,参数值 [1],值类[java.lang.Integer],SQL类型未知
存储库:
@Repository
public class DataRepository {
private static Logger log = LoggerFactory.getLogger(DataRepository.class);
@Autowired
private NamedParameterJdbcTemplate jdbcTemplate;
public Data findDataObjet() throws Exception {
Map<String, Object> parameters = new HashMap<>();
parameters.put("id1", "mike");
parameters.put("id2", new Long(1));
String sqlString = "select * from table1 where id1 = ":id1" and id2 = :id2";
Data extObj = jdbcTemplate.query(sqlString, parameters, (rs) -> {
if (rs != null && rs.next()) {
Data innerObj = new Data();
innerObj.setName(rs.getString("name"));
return innerObj;
} else {
log.info("No records found:"+rs);
return null;
}
});
return extObj;
}
}
application.properties:
spring.datasource.url=url
spring.datasource.username=user
spring.datasource.password=password
spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.type = com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.connection-timeout=60000
spring.datasource.hikari.maximum-pool-size=2
logback-spring.xml:
<springProfile name="dev">
<logger name="org.springframework.jdbc.core.JdbcTemplate">
<level value="trace" />
</logger>
<logger name="org.springframework.jdbc.core.StatementCreatorUtils">
<level value="trace" />
</logger>
<appender name="dailyRollingFileAppender"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${logsPath}TSYS2DM%d{MMddyyyy}.log
</FileNamePattern>
<maxHistory>4</maxHistory>
</rollingPolicy>
<encoder>
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level
%logger{35}-%msg %n</Pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="dailyRollingFileAppender" />
</root>
</springProfile>
日志跟踪:
2018-03-07 12:19:42.888 DEBUG 30224 --- [resources/input] o.s.jdbc.core.JdbcTemplate : Executing prepared SQL query
2018-03-07 12:19:42.889 DEBUG 30224 --- [resources/input] o.s.jdbc.core.JdbcTemplate : Executing prepared SQL statement [ select * from table1 where id1 = "?" and id2 = ?;]
2018-03-07 12:19:43.132 TRACE 30224 --- [resources/input] o.s.jdbc.core.StatementCreatorUtils : Setting SQL statement parameter value: column index 1, parameter value [mike], value class [java.lang.String], SQL type unknown
2018-03-07 12:19:43.132 TRACE 30224 --- [resources/input] o.s.jdbc.core.StatementCreatorUtils : Setting SQL statement parameter value: column index 2, parameter value [1], value class [java.lang.Integer], SQL type unknown
2018-03-07 12:19:43.439 INFO 30224 --- [resources/input] c.t.f.c.t.t.db.TRMAccountDataRepository : found record with cnsmr_id:1234
【问题讨论】:
-
参数绑定显示:
Setting SQL statement parameter value: column index 1, parameter value [mike], value class [java.lang.String], SQL type unknown。执行准备好的语句不包括用值替换 SQL 中的命名参数。它包括向驱动程序传递带有参数占位符的查询,并为所有参数设置值。你所看到的一切都很正常。 -
@Chids 根据链接,这是正常的,未知可以忽略,因为它即将到来超过 5 年,并且 api 正在像这样工作。
-
@JBNizet 感谢您的回复。
-
@sunleo,是的,行为没有改变。对此没有任何改进
标签: java spring log4j spring-jdbc