namedparameterjdbctemplate mvc journaldev example ejemplo java spring jdbctemplate

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.)