开发者社区> 问答> 正文

Spring 3.x的NamedParameterJdbcTemplate.qu?报错

import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate
import test.entity.UserInfo

String sql = "select city from tbl_user where userName like :username";
UserInfo userRequest = new UserInfo();
userRequest.setUsername("%陈%");
userRequest.setCity("城市"); // 改类有城市
NamedParameterJdbcTemplate.queryForList(sql, new BeanPropertySqlParameterSource(userRequest), UserInfo.class);

一直报错

org.springframework.dao.TypeMismatchDataAccessException: Type mismatch affecting row number 0 and column type 'VARCHAR2': Value [广州] is of type [java.lang.String] and cannot be converted to required type [test.entity.UserInfo]

//------------分割线-----------

如果:

String sql = "select userName, city from tbl_user where userName like :username";

错误如下:

org.springframework.jdbc.IncorrectResultSetColumnCountException: Incorrect column count: expected 1, actual 2


真是蛋痛,还是使用返回List<Map<String, Object>>的queryForList好了,不过要转类型麻烦。一直很忙,感觉累啊。

展开
收起
爱吃鱼的程序员 2020-06-22 14:48:52 465 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    你查询出来的[广州]是一个字符串,不能被转换为UserInfo类。其实需要查询出很多字段,只是刚开始的时候报错,后来我就试了下查询一列。可是UserInfo类有city字段,有getCity,setCity方法。我就是想Spring自动封装成UserInfo类,你看我使用的queryForList第3个参数。为什么不自动封装呢,我查询多个字段也报错,哎,真是个悲剧。使用返回List<Map<String,Object>>的queryForList是可以的。

    <atarget="_blank"rel="nofollow">https://github.com/hantsy/spring-sandbox/blob/master/dao/src/main/java/com/hantsylabs/example/spring/jdbc/NamedParamJdbcTemplateConferenceDaoImpl.java

    <atarget="_blank"rel="nofollow">https://github.com/hantsy/spring-sandbox/wiki/legacy-dao-support


    如果要返回Bean的List,用query方法和RowsMap刚才手机手误删除了评论,你可以参见#springrain#

    2020-06-23 11:57:49
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载

相关实验场景

更多