如何在JDBCTemplate.queryForMap()
返回Map接口时从JDBCTemplate.queryForMap()
加载数据?查询数据如何在map中内部维护?我尝试加载它,但遇到了以下异常:org.springframework.dao.IncorrectResultSizeDataAccessException:错误结果
代码:-
public List getUserInfoByAlll() {
List profilelist=new ArrayList();
Map m=new HashMap();
m=this.jdbctemplate.queryForMap("SELECT userid,username FROM USER");
Set s=m.keySet();
Iterator it=s.iterator();
while(it.hasNext()){
String its=(String)it.next();
Object ob=(Object)m.get(its);
log.info("UserDAOImpl::getUserListSize()"+ob);
}
return profilelist;
}
4条答案
按热度按时间jogvjijk1#
queryForMap
适用于只获取一行的情况。您的选择没有使用where
子句,因此您可能希望使用queryForList
。该错误可能表明queryForMap
只需要一行,但您的查询正在检索许多行。Check out the docs.有一个
queryForList
只接受sql;返回类型为List<Map<String,Object>>
.所以一旦你有了结果,你就可以做你正在做的事情。我会做一些像
我会让你填写细节,但我不会在这种情况下迭代键。我喜欢明确我所期望的。
如果您有一个
User
对象,并且您实际上希望加载User示例,则可以使用接受sql和类类型的queryForList
queryForList(String sql, Class<T> elementType)
(wow自从我离开Javaland以来,Spring已经改变了很多。
du7egjpx2#
我知道这很老了,但这是查询Map的最简单的方法。
只需实现ResultSetExtractor接口来定义要返回的类型。下面是如何使用它的示例。您将手动Map它,但对于简单的Map,它应该很简单。
这将给予你一个Map的返回类型,它有多行(无论你的查询返回多少行),而不是Map的列表。你可以在这里查看ResultSetExtractor文档:http://docs.spring.io/spring-framework/docs/2.5.6/api/org/springframework/jdbc/core/ResultSetExtractor.html
py49o6xq3#
为了补充@BrianBeech的答案,这在java 8中甚至被削减了:
fiei3ece4#
你可以做这样的事。
输出: