[英]SQLException: Column not found
我的 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)
);
超车:
<#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>
查询语句:
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; SQL [SELECT * FROM client] 的未分类 SQLException; SQL 状态 [S0022]; 错误代码 [0]; 未找到列 'seanceNumber'。 嵌套异常是 java.sql.SQLException:未找到列“seanceNumber”。
也检查错别字。 我究竟做错了什么?
通过将表中的“seanceNumber”列重命名为“seancenumber”解决了该问题。
“SQL 中的列名通常不区分大小写 - 因此无论您要求降神还是 SEANCE 或 SeAnCe。但是,如果您将列名放在双引号中,它们就会区分大小写 - 我猜您的 UserMapper 确实做到了并要求一个名为“seanceNumber”的列,但数据库找不到它(因为它在数据库中称为 seancenumber 或 SEANCENUMBER)。”
即使 SQL 是一个标准,也没有数据库完全实现它。 为避免此类错误,最好在表和列命名中使用 sheak_case。
在你的情况下seance_number
也应该工作。
我遇到了同样的问题,但在我的情况下,在我的映射器中获取列时,我有一个空间。 在您的示例中,它就像 rs.getInt("seanceNumber ") 导致相同的错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.