前台傳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語句。此時要注意表名應該與資料庫中原本的相一致,而不能用實體名稱代替。