SQLException:找不到列

时间:2019-02-24 12:19:38

标签: java sql freemarker

我的sql查询应该从表中获取所有字段,并使用UserMapper模板将它们传输到FTL页。该模板指示要创建的对象以及与哪些表列匹配的对象的字段。

总结:所有字段均正常工作,但是seanceNumber字段给出错误“找不到列'seanceNumber'”。

这很奇怪,因为在任何数据类型为int的列中,列都是正确的。

表格:

(
  id           int auto_increment,
  name         varchar(255) null,
  email        varchar(255) null,
  seance       varchar(255) null,
  seanceNumber int          not null,
  seat         int          null,

  constraint client_id_uindex
  unique (id)
);

FTL:

<#list clientsList as client>

<tr>
    <td><a href="/client/${client.id}">${client.id}</a></td>
    <td>${client.name}</td>
    <td>${client.email}</td>
    <td>${client.seance}</td>
    <td>${client.seanceNumber}</td>
    <td>${client.seatNumber}</td>
</tr>

SQL:

    public List<Client> getAll() {
    String sql = "SELECT * FROM client";
    return jdbcTemplate.query(sql, new UserMapper());
}

UserMapper:

    public Client mapRow(ResultSet rs, int rowNum) throws SQLException {
    Client client = new Client();
    client.setId(rs.getInt("id"));
    client.setName(rs.getString("name"));
    client.setEmail(rs.getString("email"));
    client.setSeance(rs.getString("seance"));
    client.setSeanceNumber(rs.getInt("seanceNumber"));
    client.setSeatNumber(rs.getInt("seat"));


    return client;
}

结果:

消息请求处理失败;嵌套的异常是org.springframework.jdbc.UncategorizedSQLException:StatementCallback;未分类的SQLException for SQL [SELECT * FROM client]; SQL状态[S0022];错误代码[0];找不到列“ seanceNumber”。嵌套的异常是java.sql.SQLException:找不到列“ seanceNumber”。

也检查了错别字。 我在做什么错了?

3 个答案:

答案 0 :(得分:0)

通过将表中的“ seanceNumber”列重命名为“ seancenumber”来解决了问题。

“ SQL中的列名通常不区分大小写-因此,您是否要求seance或SEANCE或SeAnCe都无关紧要。但是,如果将列名放在双引号中,则它们会区分大小写-我想您UserMapper正是这样做的,并要求提供一个名为“ seanceNumber”的列,数据库无法找到它(因为在数据库中称为seancenumber或SEANCENUMBER)。”

答案 1 :(得分:0)

即使SQL是标准的,也没有数据库可以完全实现它。 为避免此类错误,最好在表和列的命名中使用sheak_case。

在您的情况下,seance_number也应该起作用。

答案 2 :(得分:0)

我遇到了同样的问题,但在我的情况下,当在我的映射器中获取列时,我有一个空间。 在你的例子中,它会像 rs.getInt("seanceNumber") 这导致了同样的错误。