【问题标题】:JdbcTemplate. IncorrectResultSetColumnCountException: Incorrect column countJdbc 模板。 IncorrectResultSetColumnCountException:列数不正确
【发布时间】:2019-07-16 21:44:07
【问题描述】:

我使用 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. 如何在不创建这 3 个值的对象的情况下获取多列值的列表(可能在字符串数组中)?

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

【问题讨论】:

    标签: spring spring-jdbc jdbctemplate


    【解决方案1】:

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

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

    如果要获取字符串数组 (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)));
    

    【讨论】:

    • 非常感谢!这是最好的解决方案。
    【解决方案2】:

    我做了以下事情:

    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());
    

    【讨论】:

      猜你喜欢
      • 2016-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-16
      • 2020-09-06
      相关资源
      最近更新 更多