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")
这导致了同样的错误。
我的 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") 这导致了同样的错误。