前后台Date类型数据处理

前台传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语句。此时要注意表名应该与数据库中原本的相一致,而不能用实体名称代替。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值