前台传Date类型数据所导致的一系列问题
前台js传过来的Date类型的数据格式默认为:
Fri Nov 18 2016 00:00:00 GMT+0800 (中国标准时间)
传给后台使用Java.util.Date类型的属性进行获取的时候也存储为这个格式,这就使在dao层拼接成sql语句的时候,处理不好之中的空格,导致语句执行时出现问题。
所以在后台对此进行处理
方法:
使用Java8新特性的LocalDate类
把Date类型数据转换成LocalDate类型,再进行格式转换
@Override
public int add(e_boms boms) {
Instant instant = boms.getApply_end_date().toInstant();
ZoneId zone = ZoneId.systemDefault();
LocalDateTime apply_end_date = LocalDateTime.ofInstant(instant,zone);//类型转换
instant = boms.getApply_start_date().toInstant();
LocalDateTime apply_start_date = LocalDateTime.ofInstant(instant,zone);
DateTimeFormatter dateTimeFormatter=DateTimeFormatter.ofPattern("yyyy-MM-dd");//设置转换格式
String jpql = "insert into t_boms (foreign_key_id,code,material_id,apply_start_date,apply_end_date,mate) select count(*),"+boms.getCode()+","+boms.getMaterial_id()+",'"+apply_start_date.format(dateTimeFormatter)+"','"+apply_end_date.format(dateTimeFormatter)+"',0 from t_boms";//转换格式后拼接
Query query = manager.createNativeQuery(jpql);
query.executeUpdate();
return boms.getId();
}
PS1:sql语句插入时间数据时,应该用单引号包围起来。
PS2:jpql语句不支持insert操作,所以不能使用createQuery方法进行执行,必须改用createNativeAQuery方法执行原生的sql语句。此时要注意表名应该与数据库中原本的相一致,而不能用实体名称代替。