如何使用 JDBCTemplate.queryForMap 获取地图数据

2022-09-01 00:15:26

如何从中加载数据并返回地图界面。如何在地图内部维护查询数据。我试图加载,但我得到了下面的异常,即org.springframework.dao.IncorrectResultSizeDataAccessException:不正确的结果JDBCTemplate.queryForMap()

代码:-

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;
}

请帮帮我


答案 1

queryForMap如果要获取单个行,则适用。您选择的选项没有子句,因此您可能希望 .该错误可能表示需要一行,但您的查询正在检索多行。wherequeryForListqueryForMap

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

List<Map<String,Object>>.

因此,一旦你有了结果,你就可以做你正在做的事情。我会做这样的事情

List results = template.queryForList(sql);

for (Map m : results){
   m.get('userid');
   m.get('username');
} 

我会让你填写详细信息,但在这种情况下,我不会迭代键。我喜欢明确我所期待的。

如果你有一个对象,并且你确实想要加载用户实例,则可以使用采用sql和类类型的UserqueryForList

queryForList(String sql, Class<T> elementType)

(哇,自从我离开爪哇岛以来,春天已经发生了很大的变化。


答案 2

我知道这已经很老了,但这是查询地图的最简单方法。

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

jdbcTemplate.query("select string1,string2 from table where x=1", new ResultSetExtractor<Map>(){
    @Override
    public Map extractData(ResultSet rs) throws SQLException,DataAccessException {
        HashMap<String,String> mapRet= new HashMap<String,String>();
        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


推荐