java时间空值_Java SpringBoot Mybatis 日期类型属性空值保存出现异常
日期字段空导致保存异常
数据库端表结构
可以看到字段 bill_date 是 datetime 日期类型,没有设置为 not null,那么如果前段传递来的对象中该属性为空,应该可以保存。
HTTP请求测试代码
测试代码如下:
@Test
public void test01() throws Exception {
RawMain record = new RawMain();
record.setBill_type("1001");
// record.setBill_date(new Date());
ObjectMapper mapper = new ObjectMapper();
ObjectWriter ow = mapper.writer().withDefaultPrettyPrinter();
java.lang.String requestJson = ow.writeValueAsString(record);
System.out.print("即将写入的数据是:" + requestJson);
String result = mockMvc.perform(MockMvcRequestBuilders.post("/rawMain/insert")//发送 get 请求
.contentType(MediaType.APPLICATION_JSON_UTF8).content(requestJson))// 发送的请求中带名称为 username 的参数
.andExpect(MockMvcResultMatchers.status().isOk())// 要求返回200
.andReturn().getResponse().getContentAsString();
System.out.println("插入后返回:" + result);
}
使用 SpringBootTest发送 http 请求测试保存,手动创建即将要保存的对象,只设置了一个属性 bill_type,其他属性都没有设置,并且数据库端对应表中的字段都没有设置必填,照理应该能保存成功,但是执行后报错:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException:
### Error updating database. Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
### The error may exist in file [D:\Java\ideaProject\femis\target\classes\mapper\business\RawMainMapper.xml]
### The error may involve com.ccsoft.femis.dao.RawMainMapper.insertSelective-Inline
### The error occurred while setting parameters
### SQL: insert into raw_main
### Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
注意上面的 The error occurred while setting parameters 可以看出是传入的参数有问题
反证
就如上面的 java 代码,把设置属性 bill_date 为当前日期的代码行 record.setBill_date(new Date()); 去掉注释再次执行测试,成功写入数据到数据库了。
问题
那么问题来了,明明数据库端没有设置必填,请求参数(表对应的对象)中该属性为空应该能写入,但实际情况是只有设置了日期才能成功写入,这是哪里有问题?
补充
打印出来的发送请求中带的参数对象是:
RawMain(iid=null, seq_month=null, seq_day=null, seq_month_all=null, seq_day_all=null, bill_type=1001, bill_date=null, transport=null, assemble=null, driver=null, phone=null, car_number=null, freight_charge=null, assemble_charge=null, freight_settlement=null, remark=null, create_time=null, is_test=null, code_month=null, code_day=null, code_month_all=null, code_day_all=null, bill_code=null)
可以看到属性 bill_type 有值,其他属性都是NULL
mybatis的相关 xml 文件的代码如下:
SELECT LAST_INSERT_ID()
insert into raw_main
iid,
seq_month,
seq_day,
seq_month_all,
seq_day_all,
bill_date,
transport,
assemble,
driver,
phone,
car_number,
freight_charge,
assemble_charge,
freight_settlement,
remark,
create_time,
#{iid,jdbcType=INTEGER},
#{seq_month,jdbcType=INTEGER},
#{seq_day,jdbcType=INTEGER},
#{seq_month_all,jdbcType=INTEGER},
#{seq_day_all,jdbcType=INTEGER},
#{bill_date,jdbcType=TIMESTAMP},
#{transport,jdbcType=VARCHAR},
#{assemble,jdbcType=VARCHAR},
#{driver,jdbcType=VARCHAR},
#{phone,jdbcType=VARCHAR},
#{car_number,jdbcType=VARCHAR},
#{freight_charge,jdbcType=DECIMAL},
#{assemble_charge,jdbcType=DECIMAL},
#{freight_settlement,jdbcType=VARCHAR},
#{remark,jdbcType=VARCHAR},
#{create_time,jdbcType=TIMESTAMP},
java时间空值_Java SpringBoot Mybatis 日期类型属性空值保存出现异常相关推荐
- java 时间判断_java怎样判断日期的先后?
展开全部 Java判段两个日期的先后,方法如下: import java.util.Date; import java.text.ParseException; import java.text.Si ...
- Java时间工具类(把日期时间转换成xx秒前、xx分钟前、xx小时前...)
Java时间工具类(把日期时间转换成xx秒前.xx分钟前.xx小时前...) package com.liuzy.javaopen.entity; import java.text.ParseExce ...
- SpringBoot+Mybatis+Druid批量更新 multi-statement not allow异常
SpringBoot+Mybatis+Druid批量更新 multi-statement not allow异常 参考文章: (1)SpringBoot+Mybatis+Druid批量更新 multi ...
- java 时间处理_JAVA处理日期时间常用方法
Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR.MONTH.DAY_OF_MONTH.HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了 ...
- java时间方法_JAVA处理日期时间常用方法
转载JAVA处理日期时间常用方法: 1.java.util.Calendar Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR.MONTH.DAY_OF_MONTH.HOUR 等 日 ...
- java时间代码_java处理日期时间代码
public static String FORMATE_DATE_STR = "yyyy-MM-dd"; public static String FORMATE_TIME_ST ...
- java时间规范化_Java日期时间使用总结
一.Java中的日期概述 日期在Java中是一块非常复杂的内容,对于一个日期在不同的语言国别环境中,日期的国际化,日期和时间之间的转换,日期的加减运算,日期的展示格式都是非常复杂的问题. 在Java中 ...
- java 时间类_Java日期和时间类简介
Java 的日期和时间类位于 java.util 包中.利用日期时间类提供的方法,可以获取当前的日期和时间,创建日期和时间参数,计算和比较时间. Date 类 Date 类是 Java 中的日期时间类 ...
- java时间计算器_java后台时间计算
将毫秒转换成年月日时分秒 public static void main(String[] args) { Date date = new Date(); System.out.println(dat ...
最新文章
- 导航控制器自定义返回控件及手势失效问题
- 新书上市 | C程序员! 这可能是你搞定指针最轻松的方式
- C 语言获取系统时间
- DBA(四):数据读写分离,MySQL多实例操作
- .Net Core应用框架Util介绍(一)
- 查看是否安装显卡驱动,查看可以使用的驱动版本
- 配置Https 和 HSTS
- Windows自动关机命令脚本
- 建材物资管理系统(软件定义)
- BGP的基本配置以及路由聚合
- 实战教程:平面设计配色原则
- Docker三剑客之Docer Swarm
- WIN2003 R2安装EPSON6200L打印机问题解决
- 计算机视觉转型大数据开发,分享一下我的学习历程和大厂面经
- Android rom开发:mtk android9.0 开放预置app权限
- Scratch技巧—-使用克隆技术实现菜单按钮
- qt+opencv进行七巧板识别应用(三)
- 手机酷狗2 java_酷狗叮咚(原手机酷狗) 2.70 For Java 中文官方安装版下载
- Do not use built-in or reserved HTML elements as compo
- 我想使用Simulink模型模拟期间生成的数据更新我在App Designer中设计的GUI。换句话说,如何从App Designer访问Simulink模型的运行时参数?