Bug:使用到了spring的jdbctemplate模板 使用到以下
template.queryForObject(sql, requiredType)
template.queryForList(sql, elementType, args)
报以下错误
org.springframework.jdbc.IncorrectResultSetColumnCountException: Incorrect column count: expected 1, actual 3
检查完自己的代码和需要传入的参数类型确定没有传错
====先百度发现出现这种问题的真不少
==解决办法
RowMapper<User> rm = ParameterizedBeanPropertyRowMapper.newInstance(User.
class
);
User user = (User)
this
.jdbcTemplate.queryForObject("SELECT * FROM USER WHERE ID = 1", rm);
封装上一次RowMapper使用
jdbcTemplate.queryForObject(
sql
, rm);
==封装完测试正常
查看源码 问什么会这样
@Override
public <T> T queryForObject(String sql, Class<T> requiredType, Object... args) throws DataAccessException {
return queryForObject(sql, args, getSingleColumnRowMapper(requiredType));
}
他返回的事单个列值得对象 就是一列值
所有会出现 期待 1 actual 实际是 3列 这种问题 真的好想说shit what,s the fuck tools?
===================queryForList的解决方法
解决:
1.不在调用queryForList而是直接调用query然后调用Spring的参数封装rowmapper
@Override
public <E> List<E> findList(String sql, Object[] args, Class<E> clazz) {
RowMapper<E> rm = ParameterizedBeanPropertyRowMapper.newInstance(clazz);
return template.query(sql, args, rm);
}
2.自己封住下rowmapper 不在调用queryForList自己封装rowmapper
可以去如下地址查看实现方式:
地址代码快照: