web-dev-qa-db-fra.com

JDBCTemplate queryForMap pour récupérer plusieurs lignes

Puis-je utiliser queryForMap s'il y a plusieurs lignes renvoyées par la requête.

Pour une seule ligne, le code ci-dessous fonctionne correctement.

public Map<String, Object> retrieveMultipleRowsColumns(String deptName){
    return jdbcTemplate.queryForMap("SELECT DEPT_ID,DEPT_NAME FROM DEPT WHERE DEPT_NAME = ?", deptName);
}

Comment modifier cela pour plusieurs lignes?

15
user182944

Utilisez queryForListvoir le javadoc pour plus de détails . Il renvoie List<Map<String,Object>>

public List<Map<String, Object>> retrieveMultipleRowsColumns(String deptName){
    return jdbcTemplate.queryForList("SELECT DEPT_ID,DEPT_NAME FROM DEPT WHERE DEPT_NAME = ?", deptName);
}
17
John Farrelly

Je sais que c'est vraiment ancien, mais il existe un moyen beaucoup plus simple de le faire si vous recherchez une carte.

Implémentez simplement l'interface ResultSetExtractor pour définir le type que vous souhaitez renvoyer. Vous trouverez ci-dessous un exemple d'utilisation. Vous allez le cartographier manuellement, mais pour une carte simple, cela devrait être simple.

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

Cela vous donnera un type de retour de carte qui a plusieurs lignes (quelle que soit la quantité retournée par votre requête) et non une liste de cartes. Vous pouvez afficher les documents ResultSetExtractor ici: http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jdbc/core/ResultSetExtractor.html

21
Brian Beech