Bug:使用到了spring的jdbctemplate模板 使用到以下

template.queryForObject(sql, requiredType)

template.queryForList(sql, elementType, args)

Bug库____org.springframework.jdbc.IncorrectResultSetColumnCountException: Incorrect column count: exp_sql

报以下错误

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

可以去如下地址查看实现方式:

地址代码快照:

Bug库____org.springframework.jdbc.IncorrectResultSetColumnCountException: Incorrect column count: exp_sql_02

Bug库____org.springframework.jdbc.IncorrectResultSetColumnCountException: Incorrect column count: exp_bc_03

Bug库____org.springframework.jdbc.IncorrectResultSetColumnCountException: Incorrect column count: exp_sql_04