JDBCTemplate queryForMap用于检索多行

时间:2014-06-14 14:59:27

标签: java spring spring-3 jdbctemplate

如果查询返回多行,是否可以使用queryForMap

对于单行,以下代码可以正常工作。

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

如何为多行修改此内容?

3 个答案:

答案 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