2017-06-29 50 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