一、引子
在项目中遇到一个奇怪的问题,调用一个更新接口,接口要求对象的一个属性name值为空,就可以更新,但是如果不为空就不能更新。
然后在数据库里,手动把name字段的值清空了,但是调用后依然出错,于是乎开始进一步分析原因。
二、数据库结构
如图,其中name是可以为空的。
首先插入一条测试数据,SQL如下图所示
insert into student values(null,"jianghuiwen",100);
然后更新为空
update student set name="" where id = 103829;
查询后,显示如图所示
三、客户端测试
客户端采用的是java的代码,代码如图:
显示结果是:空。
继续更新为null:
update student set name=null where id = 103829;
继续运行测试,显示结果是:null。
四、接口问题
去寻找接口,发现接口写的是:
发现实际上接口只是做了null判断,而如果更新为”“的话,完全是两个不同的值。
所以,在业务逻辑中,要特别注意在mysql中的NULL和空,以及在JAVA代码中分别针对两种的判断。
五、小结
经过测试,当java使用对象插入到数据库的时候,如果某个字段不设置,不使用A.set()方法的话,插入的将是NULL值,而不是空值,空值需要使用A.set(“”)才会是空值,另外mysql中的null和NULL是同样的。
更多请登录网站查看:http://www.javaer.com.cn/