2017-06-29 134 views
2

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

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

但是,这似乎并没有工作。我已经深入了解Spring Core类,并且我的对象的空值是存在的,但它仍然变为0的地方。

有人可以帮助我,这让我烦恼几天。

+0

Types.Integer应该诀窍 – eduyayo

+0

@eduyayo谢谢你的建议,这对我有用。我将发布这个作为答案,并针对我的案例进行一些补充。 – Tacker529

回答

0

的问题的解决方案是将Types.Integer空值。我仍然不确定为什么它不适用于Types.NULL,但我会调查。目前这是解决方案

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

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

0

请尝试的PreparedStatement保存在整数列

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

enter link description here

+0

不幸的是,这是不可能的,该体系结构非常庞大,并且已经被设置为使用Spring的值映射。因此,直接调用PreparedStatements并不是一种选择,但上面评论的建议确实有效。不管怎么说,还是要谢谢你 – Tacker529