加载中…
个人资料
岁月静好_sam
岁月静好_sam
  • 博客等级:
  • 博客积分:0
  • 博客访问:3,041
  • 关注人气:9
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

jdbctemplate的sql日志输出

(2013-09-18 11:31:53)
标签:

it

分类: IT

这是jdbctemplate的关于日志输出的核心代码:
if (logger.isDebugEnabled()) {
String sql = getSql(psc);
logger.debug("Executing prepared SQL statement" + (sql != null ? " [" + sql + "]" : ""));

通过这段代码发现,只要在log4j.properties文件里,加入:
log4j.logger.org.springframework.jdbc.core=debug 或者 log4j.logger.org.springframework.jdbc.core.JdbcTemplate=debug
就可以实现sql的日志输出。
}

我们发现:private static String getSql(Object sqlProvider) {
if (sqlProvider instanceof SqlProvider) {
return ((SqlProvider) sqlProvider).getSql();
}
else {
return null;
}
}

所以自动生成key的代码要注意一下儿:
KeyHolder keyHolder = new GeneratedKeyHolder(); 
jdbcTemplate.update(new KeyGenPreparedStatementCreator("INSERT INTO ci (guid) VALUES('guid50');"), keyHolder);
int num = keyHolder.getKey().intValue();

这里update的PreparedStatementCreator必须要实现SqlProvider,否则不被打印
protected class KeyGenPreparedStatementCreator implements PreparedStatementCreator, SqlProvider {

private final String sql;

public KeyGenPreparedStatementCreator(String sql) {
Assert.notNull(sql, "SQL must not be null");
this.sql = sql;
}

@Override
public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
return con.prepareStatement(this.sql, Statement.RETURN_GENERATED_KEYS);
}

@Override
public String getSql() {
return this.sql;
}
}



0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有