java - mvc - Cómo obtener datos de mapas utilizando JDBCTemplate.queryForMap
spring jdbctemplate configuration (3)
Cómo cargar datos desde JDBCTemplate.queryForMap()
y devuelve la Interfaz del mapa. Cómo se mantienen los datos de la consulta internamente en el mapa. Intento cargar pero tengo la excepción inferior, es decir, org.springframework.dao.IncorrectResultSizeDataAccessException: Resultado incorrecto
Código:-
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;
}
Por favor ayudame
Para agregar a la respuesta de @BellBeech, esto se reduce aún más en java 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;
});
Sé que esto es realmente antiguo, pero esta es la forma más sencilla de consultar el Mapa.
Simplemente implemente la interfaz ResultSetExtractor para definir qué tipo desea devolver. A continuación se muestra un ejemplo de cómo utilizar esto. Lo mapeará manualmente, pero para un mapa simple, debería ser sencillo.
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;
}
});
Esto le dará un tipo de Mapa de retorno que tiene múltiples filas (sin embargo, muchas de sus consultas devuelven) y no una lista de Mapas. Puede ver los documentos de ResultSetExtractor aquí: http://docs.spring.io/spring-framework/docs/2.5.6/api/org/springframework/jdbc/core/ResultSetExtractor.html
queryForMap
es apropiado si desea obtener una sola fila. Está seleccionando sin una cláusula where
, por lo que probablemente desee queryForList
. El error es probablemente indicativo del hecho de que queryForMap
quiere una fila, pero la consulta está recuperando muchas filas.
Echa un vistazo a los documentos. Hay un queryForList
que toma solo sql; el tipo de retorno es un
List<Map<String,Object>>
.
Así que una vez que tenga los resultados, puede hacer lo que está haciendo. Yo haria algo como
List results = template.queryForList(sql);
for (Map m : results){
m.get(''userid'');
m.get(''username'');
}
Le dejaré que complete los detalles, pero en este caso no repetiría las claves. Me gusta explicarme lo que estoy esperando.
Si tiene un objeto de User
y realmente desea cargar instancias de usuario, puede usar el queryForList
que toma sql y un tipo de clase
queryForList(String sql, Class<T> elementType)
(wow Spring ha cambiado mucho desde que dejé Javaland.)