为NUMBER列插入NULL

时间:2017-06-29 11:45:39

标签: java sql spring jdbc

我正在尝试在H2数据库中为我的NUMBER列插入NULL值。 在我的Java模型中,相应的值是Long(不是原始的)。现在,我知道如果没有指定,JDBC驱动程序如何为空值插入0,但我确实如此。 我的DAO层在Spring中,对于这个确切的列,我以这种方式映射它的值。

if(user.getDefaultNumber() == null){
      map.addValue("defaultNumber", user.getDefaultNumber(), Types.NULL);
}else{
      map.addValue("defaultNumber", user.getDefaultNumber());
} 

但是,这似乎不起作用。我已将其深入到Spring Core类中,并且我的对象的null值已存在,但在某处它仍然会变为0.

有人可以帮助我,这让我困扰了好几天。

2 个答案:

答案 0 :(得分:0)

请尝试使用PreparedStatement在整数列中保存空值

pst.setNull(4, java.sql.Types.INTEGER); 

enter link description here

答案 1 :(得分:0)

问题的解决方案是添加Types.Integer。我仍然不确定为什么它不适用于Types.NULL但我会调查。现在这是解决方案

if(user.getDefaultNumber() == null){
      map.addValue("defaultNumber", user.getDefaultNumber(), Types.INTEGER);
}else{
      map.addValue("defaultNumber", user.getDefaultNumber());
}

此外,从DB读取时正确映射非常重要。 JDBC将从数据库中读取NULL,但它仍将在Java的属性中插入0。因此,如果阅读处理不当,可能会留下一个印象,即使写作部分确实没问题,问题仍然存在。