当我尝试使用SimpleJDBCInsert在表中插入记录并使列的值大于列长度时,查询不会执行,不会抛出任何异常,并阻止进一步的代码流。
当我检查Mysql完整处理列表时,在代码到达insert statmemt之后,要触发查询的数据库显示在SLEEP中
我通过将列值截断为应用程序中模式的列长来纠正了这个问题。
示例代码示例:
public class BlogDaoImpl implements BlogDao {
private SimpleJdbcTemplate simpleJdbcTemplate;
private SimpleJdbcInsert insertBlog;
public void setDataSource(DataSource dataSource) {
this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
this.insertBlog =
new SimpleJdbcInsert(dataSource)
.withTableName("BLOG");
.usingGeneratedKeyColumns("id");
}
public void create(String name, Integer age, Long salary) {
Map parameters = new HashMap();
parameters.put("city_id", "Vancouver");
parameters.put("blogger", "Bay Max");
Number id = insertEmp.executeAndReturnKey(parameters);
}
}
在这种情况下,如果Mysql数据库中的city_id长度为VARCHAR(2),则代码将被阻止在Number行id = insertEmp.executeAndReturnKey(参数);
有兴趣知道,Spring应该抛出一个JDBC例外 数据截断:列或任何其他异常的数据太长。