복붙노트

[SPRING] JDBCTemplate.queryForMap을 사용하여지도 데이터를 얻는 방법

SPRING

JDBCTemplate.queryForMap을 사용하여지도 데이터를 얻는 방법

JDBCTemplate.queryForMap ()에서 데이터를로드하는 방법 및지도 Interface.How 내부적으로 map.I 내에서 유지 관리하는 방법을로드합니다.하지만 예외, 즉 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 도와주세요

해결법

  1. ==============================

    1.queryForMap은 단일 행을 가져 오려면 적절합니다. where 절없이 선택하기 때문에 아마도 queryForList를 원할 것입니다. 이 오류는 queryForMap이 한 행을 원하지만 조회가 많은 행을 검색하고 있다는 사실을 나타낼 수 있습니다.

    queryForMap은 단일 행을 가져 오려면 적절합니다. where 절없이 선택하기 때문에 아마도 queryForList를 원할 것입니다. 이 오류는 queryForMap이 한 행을 원하지만 조회가 많은 행을 검색하고 있다는 사실을 나타낼 수 있습니다.

    문서를 확인하십시오. 그냥 SQL을 사용하는 queryForList가 있습니다. 반환 유형은

    List >

    따라서 결과를 얻으면 자신이하는 일을 할 수 있습니다. 나는 뭔가를 할 것입니다.

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

    세부 사항을 채우 겠지만,이 경우 키를 반복하지는 않습니다. 나는 내가 기대하는 바를 분명히 밝힙니다.

    User 객체가 있고 실제로 User 인스턴스를로드하려는 경우 sql과 클래스 유형을 사용하는 queryForList를 사용할 수 있습니다.

    queryForList (String sql, Class elementType)

    (내가 Javaland를 떠난 이래로 봄이 많이 바뀌었다.)

  2. ==============================

    2.나는 이것이 정말로 오래되었음을 알고 있지만 이것은 Map을 쿼리하는 가장 간단한 방법이다.

    나는 이것이 정말로 오래되었음을 알고 있지만 이것은 Map을 쿼리하는 가장 간단한 방법이다.

    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이 제공됩니다. 여기에서 ResultSetExtractor 문서를 볼 수 있습니다. http://docs.spring.io/spring-framework/docs/2.5.6/api/org/springframework/jdbc/core/ResultSetExtractor.html

  3. ==============================

    3.@ BrianBeech의 대답에 덧붙이 자면, 이것은 자바 8에서 더 잘 다듬어졌다.

    @ BrianBeech의 대답에 덧붙이 자면, 이것은 자바 8에서 더 잘 다듬어졌다.

    jdbcTemplate.query("select string1,string2 from table where x=1", (ResultSet rs) -> {
        HashMap<String,String> results = new HashMap<>();
        while (rs.next()) {
            results.put(rs.getString("string1"), rs.getString("string2"));
        }
        return results;
    });
    
  4. from https://stackoverflow.com/questions/10029785/how-to-get-map-data-using-jdbctemplate-queryformap by cc-by-sa and MIT license