SQLException:找不到列

SQLException: Column not found

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

总而言之:所有字段都正常工作,但 seanceNumber 字段给出错误 "Column 'seanceNumber' not found"。

这很奇怪,因为列是正确的,所有数据类型都是 int。

Table:

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

用户映射器:

    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;未分类 SQLSQL 异常 [SELECT * 来自客户端]; SQL状态[S0022];错误代码 [0];未找到列 'seanceNumber'。;嵌套异常是 java.sql.SQLException:未找到列 'seanceNumber'。

也检查了拼写错误。 我做错了什么?

问题已通过将 table 中的列 'seanceNumber' 重命名为 'seancenumber' 得到解决。

"Column names in SQL are usually case-insensitive - so it doesn't matter whether you ask for seance or SEANCE or SeAnCe. However, if you put the column names in double quotes, they become case sensitive - I guess your UserMapper did exactly that and asked for a column named "seanceNumber",数据库找不到它(因为它在数据库中称为 seancenumber 或 SEANCENUMBER)。"

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

在你的情况下 seance_number 也应该有效。

我遇到了同样的问题,但就我而言,在我的映射器中获取该列时还剩下 space。 在你的例子中就像 rs.getInt("seanceNumber") 这导致了同样的错误。