prosource

JDB를 이용하여 지도 데이터를 가져오는 방법CT 템플릿.queryForMap

probook 2023. 10. 30. 21:04
반응형

JDB를 이용하여 지도 데이터를 가져오는 방법CT 템플릿.queryForMap

에서 데이터를 로드하는 방법JDBCTemplate.queryForMap()지도 인터페이스를 반환할 때?질의 데이터는 지도 내부에서 어떻게 유지되고 있습니까?로드하려고 했는데 예외가 발생했습니다. org.springframework.dao.잘못된 결과 크기 데이터 액세스예외: 잘못된결과

코드:-

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

queryForMap단일 행을 얻고자 하는 경우 적합합니다.다음 항목 없이 선택하고 있습니다.where조항, 그래서 당신은 아마도 당신이 원할 것입니다.queryForList. 그 오류는 아마도 다음과 같은 사실을 나타낼 것입니다.queryForMap하나의 행을 원하지만 쿼리가 많은 행을 검색하고 있습니다.

문서를 확인합니다.있습니다.queryForList그것은 단지 sql이 필요합니다; 리턴 타입은 a입니다.

List<Map<String,Object>>.

그래서 일단 결과가 나오면, 여러분은 여러분이 하고 있는 일을 할 수 있습니다.저는 뭔가를 할 것입니다.

List results = template.queryForList(sql);

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

자세한 내용은 알려드리겠지만, 이 경우에는 키를 반복하지 않겠습니다.저는 제가 기대하고 있는 것에 대해 분명히 말하는 것을 좋아합니다.

만약 당신이.Userobject, 그리고 실제로 User instance를 로드하고 싶다면, 당신은queryForListsql과 클래스 유형을 사용하는

queryForList(String sql, Class<T> elementType)

(우와 자바랜드를 떠난 후 봄은 많이 변했습니다.)

이것이 정말 오래된 것은 알지만 이것이 지도를 조회하는 가장 간단한 방법입니다.

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

이렇게 하면 여러 행(쿼리가 반환되는 개수만큼)이 있는 반환된 지도 유형이 제공되고 지도 목록이 제공되지 않습니다.ResultSetExtractor 문서는 http://docs.spring.io/spring-framework/docs/2.5.6/api/org/springframework/jdbc/core/ResultSetExtractor.html 에서 볼 수 있습니다.

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

이런 거 하시면 돼요.

 List<Map<String, Object>> mapList = jdbctemplate.queryForList(query));
    return mapList.stream().collect(Collectors.toMap(k -> (Long) k.get("userid"), k -> (String) k.get("username")));

출력:

 {
  1: "abc",
  2: "def",
  3: "ghi"
}

언급URL : https://stackoverflow.com/questions/10029785/how-to-get-map-data-using-jdbctemplate-queryformap

반응형