JdbcTemplate。 IncorrectResultSetColumnCountException:不正确的列数

时间:2019-07-16 21:44:07

标签: spring spring-jdbc jdbctemplate

我使用Spring JdbcTemplate查询几个值的列表:

List<String[]> tankNames = jdbcTemplate.queryForList(
                "select name, country, level from tanklist", String[].class);

出现以下错误:

  

org.springframework.jdbc.IncorrectResultSetColumnCountException:   列数不正确:预期为1,实际为3

  1. 为什么我使用 String [] 时期望1?
  2. 如何在不创建这三个值的对象的情况下获取几列值的列表(也许在字符串数组中)?

我的最终目标是将该响应转换为字符串列表。

2 个答案:

答案 0 :(得分:1)

您可以改用以下方法来简化实现

<T> List<T> query(String sql, RowMapper<T> rowMapper)

如果要获取String数组(String [])的列表,即每一行的列都是String数组的元素,请使用以下

List<String[]> allTankNames = jdbcTemplate.query(
    "select name, country, level from tanklist", 
    (rs, rowNum) -> new String[] {rs.getString(1), rs.getString(2), rs.getString(3)});

但是,您的代码建议您要使所有列串联在一起的每一行获得一个字符串,为此,请使用以下

List<String> allTankNames = jdbcTemplate.query(
    "select name, country, level from tanklist", 
    (rs, rowNum) -> String.format("%s %s %s", rs.getString(1),rs.getString(2), rs.getString(3)));

答案 1 :(得分:0)

我做了以下事情:

List<Map<String, Object>> allTankNames = jdbcTemplate.queryForList(
                "select name, country, level from tanklist");

我的目标是将其转换为字符串列表:

List<String> tankNamesWithInfo = allTankNames.stream().map(m -> (String) m.get("name") + m.get("country") + m.get("level")).collect(Collectors.toList());