如何使用JDBCTemplate.queryForMap获取Map数据

如何从JDBCTemplate.queryForMap()加载数据,它返回Map接口。如何在map内部维护查询数据。我试图加载但是我得到了以下exception,即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; } 

Plz帮助我

如果要获取单行, queryForMap是合适的。 您正在选择没有where子句,因此您可能想要queryForList 。 该错误可能表明queryForMap需要一行,但您查询的是检索多行。

查看文档。 有一个queryForList只需要sql; 返回类型是

List>

所以一旦你得到了结果,你就可以做你正在做的事情。 我会做点什么的

 List results = template.queryForList(sql); for (Map m : results){ m.get('userid'); m.get('username'); } 

我会让你填写细节,但在这种情况下我不会迭代密钥。 我喜欢明确我的期望。

如果你有一个User对象,并且你真的想要加载User实例,你可以使用queryForList sql和类类型的queryForList

queryForList(String sql, Class elementType)

(自从我离开Javaland以来,Spring已经发生了很大变化。)

我知道这很老了,但这是查询Map的最简单方法。

只需实现ResultSetExtractor接口即可定义要返回的类型。 以下是如何使用它的示例。 您将手动映射它,但对于简单的映射,它应该是直截了当的。

 jdbcTemplate.query("select string1,string2 from table where x=1", new ResultSetExtractor(){ @Override public Map extractData(ResultSet rs) throws SQLException,DataAccessException { HashMap mapRet= new HashMap(); while(rs.next()){ mapRet.put(rs.getString("string1"),rs.getString("string2")); } return mapRet; } }); 

这将为您提供返回类型的Map,该Map具有多行(无论您的查询返回多少),而不是地图列表。 您可以在此处查看ResultSetExtractor文档: http : //docs.spring.io/spring-framework/docs/2.5.6/api/org/springframework/jdbc/core/ResultSetExtractor.html

要添加到@BrianBeech的答案,这在Java 8中更加严格:

 jdbcTemplate.query("select string1,string2 from table where x=1", (ResultSet rs) -> { HashMap results = new HashMap<>(); while (rs.next()) { results.put(rs.getString("string1"), rs.getString("string2")); } return results; });