我的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”。
也检查了错别字。 我在做什么错了?
答案 0 :(得分:0)
通过将表中的“ seanceNumber”列重命名为“ seancenumber”来解决了问题。
“ SQL中的列名通常不区分大小写-因此,您是否要求seance或SEANCE或SeAnCe都无关紧要。但是,如果将列名放在双引号中,则它们会区分大小写-我想您UserMapper正是这样做的,并要求提供一个名为“ seanceNumber”的列,数据库无法找到它(因为在数据库中称为seancenumber或SEANCENUMBER)。”
答案 1 :(得分:0)
即使SQL是标准的,也没有数据库可以完全实现它。 为避免此类错误,最好在表和列的命名中使用sheak_case。
在您的情况下,seance_number
也应该起作用。
答案 2 :(得分:0)
我遇到了同样的问题,但在我的情况下,当在我的映射器中获取列时,我有一个空间。 在你的例子中,它会像 rs.getInt("seanceNumber") 这导致了同样的错误。