IncorrectResultSetColumnCountException;
该报错是映射结果集(ResultSet),所映射column(列)count(数目)错误,例如;
假设,你使用的映射方法所映射的是单列,但是你sql语句查询出结果是多列,解析执行映射结果集,那这不就报错飚红了么;
下面给出一个例子;
抓住Dao层就是一顿狂改,然后service业务层。。。
error;
public Products selectById(int id) {
String sql = "select * from products where pid =?";//单行单列的查询使用queryForObject
// 通过id展示商品是使用 Templated query 是一行多列,sql 会和方法冲突
Products products = template.queryForObject(sql, Products.class, id);
return products;
}
更改以后;
dao层;
public List<Products> selectById(int id) {
String sql = "select * from products where pid =?";//单行单列的查询 通过id展示商品是使用Templated query
List<Products> list = template.query(sql, new BeanPropertyRowMapper<>(Products.class), id);
return list;
}
service层;
//findById
public Products findById(int id) {
ProductsDao productsDao = new ProductsDao();
List<Products> list = productsDao.selectById(id);
Products products = null;//可能集合为空,数据库中没这id
try {
products = list.get(0);
} catch (Exception e) {
return null;
}
return products;
}
ok啦;
代码附上;
本人使用的JDK9, MYSQL8,druid数据库连接池&Template ; 完成一个基础小案例;
bean类不在提供;表结构附上;
说明,bean类中局部使用参数数目不同的构造函数,可根据工具类和dao层查看(比如ad