如果查询返回多行,是否可以使用queryForMap
。
对于单行,以下代码可以正常工作。
public Map<String, Object> retrieveMultipleRowsColumns(String deptName){
return jdbcTemplate.queryForMap("SELECT DEPT_ID,DEPT_NAME FROM DEPT WHERE DEPT_NAME = ?", deptName);
}
如何为多行修改此内容?
答案 0 :(得分:21)
我知道这已经过时了,但是如果您正在寻找地图,有一种更简单的方法可以做到这一点。
只需实现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,其中包含多行(无论您的查询返回多少),而不是Map列表。您可以在此处查看ResultSetExtractor文档:http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jdbc/core/ResultSetExtractor.html
答案 1 :(得分:16)
使用queryForList
see the javadoc for full details。它返回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);
}
答案 2 :(得分:-2)
public <T> List<T> queryForList(String sql,
Class<T> elementType,
Object... args)
throws DataAccessException
从接口复制的描述:JdbcOperations查询给定SQL以从SQL创建预准备语句以及绑定到查询的参数列表,期望结果列表。 结果将映射到结果对象的List(每行一个条目),每个结果对象都匹配指定的元素类型。
在JdbcOperations接口中由queryForList
指定,
Parameters:sql
- 执行elementType的SQL查询 - 结果列表中所需的元素类型(例如,Integer.class)args
- 绑定到查询的参数(将其留给PreparedStatement来猜测对应的SQL类型);也可以是contain SqlParameterValue
对象,它们不仅指示参数值,还指示SQL类型和可选的缩放比例返回:与指定元素类型匹配的对象列表抛出:DataAccessException - 如果查询失败请参阅:JdbcOperations.queryForList( String,Class),SingleColumnRowMapper