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

地址代码快照:




  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值