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

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

可以去如下地址查看实现方式:http://blog.csdn.net/fengshizty/article/details/43309055

地址代码快照:




posted @ 2017-08-08 14:58  蜜獾互联网  阅读(74)  评论(0)    收藏  举报  来源