Spring jdbc模板。IncorrectResultSetColumnCountException:列计数不正确

Spring jdbc模板。IncorrectResultSetColumnCountException:列计数不正确,spring,spring-jdbc,jdbctemplate,Spring,Spring Jdbc,Jdbctemplate,我使用Spring JdbcTemplate查询几个值的列表: List<String[]> tankNames = jdbcTemplate.queryForList( "select name, country, level from tanklist", String[].class); List tankNames=jdbcTemplate.queryForList( “从储罐列表中选择名称、国家/地区、等级”,字符串[]。类别); 获取以

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

List<String[]> tankNames = jdbcTemplate.queryForList(
                "select name, country, level from tanklist", String[].class);
List tankNames=jdbcTemplate.queryForList(
“从储罐列表中选择名称、国家/地区、等级”,字符串[]。类别);
获取以下错误:

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

  • 为什么当我使用字符串[]时它期望1
  • 我如何在不创建包含这3个值的对象的情况下获得多个列(可能是字符串数组)的值的列表
  • 我的最终目标是将此响应转换为字符串列表。

    我执行了以下操作:

    List<Map<String, Object>> allTankNames = jdbcTemplate.queryForList(
                    "select name, country, level from tanklist");
    
    List allTankNames=jdbcTemplate.queryForList(
    “从列表中选择名称、国家/地区、级别”);
    
    我的目标是将其转换为字符串列表:

    List<String> tankNamesWithInfo = allTankNames.stream().map(m -> (String) m.get("name") + m.get("country") + m.get("level")).collect(Collectors.toList());
    
    List tankNamesWithInfo=allTankNames.stream().map(m->(String)m.get(“name”)+m.get(“country”)+m.get(“level”).collect(Collectors.toList());
    
    您可以使用以下方法来简化实现

    <T> List<T> query(String sql, RowMapper<T> rowMapper)
    
    列表查询(字符串sql、行映射器行映射器)
    
    如果您想获取字符串数组(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 allTankNames=jdbcTemplate.query(
    “从列表中选择名称、国家/地区、级别”,
    (rs,rowNum)->新字符串[]{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)));
    
    List allTankNames=jdbcTemplate.query(
    “从列表中选择名称、国家/地区、级别”,
    (rs,rowNum)->String.format(“%s%s%s”,rs.getString(1),rs.getString(2),rs.getString(3));
    
    非常感谢!这是最好的解决办法。