记jdbcTemplate使用的一个坑

在使用JdbcTemplate执行SQL时,应避免使用select*,因为这可能导致列数不匹配的错误,如Incorrectcolumncount。特别是在外层嵌套查询中,必须明确指定列名。文章中提到的一个例子显示,如果不指定列名,即使进行了类型转换,结果也可能不正确,对象字段会为空。解决方案是精确地列出所需的列,以确保查询结果能正确映射到Java对象上。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、在使用jdbcTemplate时,语句不能使用 select *  ,不然可能就是这样的错误:

Incorrect column count: expected 1, actual 6

2、如果像这样的外层嵌套,应该去掉外层 select *,

语句:

select * from (

select mater_score.mater_no as materNo,city,town,

mater_score.avg as avgScore,

if(@score = mater_score.avg, @count, @count := @count + 1) cityRank

from (

select mater_no,city,town,

sum(if(`timestamp` = 202303, score, 0)) as `202303`,

sum(if(`timestamp` = 202304, score, 0)) as `202304`,

sum(if(`timestamp` = 202305, score, 0)) as `202305`,

sum(if(`timestamp` = 202306, score, 0)) as `202306`,

avg(score) as `avg`

from t_kpi_fg_pool_mater_star_month

where `timestamp` in (202303,202304,202305,202306) and fk_kpi_id in('GSF12024')

and major='维护'

group by mater_no,city,town

order by `avg` desc

) mater_score,

(select @count := 0, @score := null) t

) t

不然虽然加了类型转换,结果也不是你想要的,对象字段会是空的

jdbcTemplate.query(sql, new Object[]{}, new BeanPropertyRowMapper<>(MaterViewMonthReportVO.class));

仅记录一下,不做深入探究了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值