2009-08-31 138 views
62

Java PreparedStatement提供了一種明確設置Null值的可能性。這種可能性是:PreparedStatement setNull(..)

prepStmt.setNull(<n>, Types.VARCHAR) 

這個調用的語義與使用setType和空值相同嗎?

prepStmt.setString(null) 

回答

53

guide說:

6.1.5發送JDBC NULL作爲IN參數

setNull方法允許程序員發送JDBC NULL(通用SQL NULL)值到數據庫的IN參數。但是,請注意,還必須指定參數的JDBC類型。

將Java空值傳遞給setXXX方法(如果它需要Java對象作爲參數),JDBC NULL也會發送到數據庫。但是,只有在指定了JDBC類型的情況下,setObject方法纔可以取null值。

+1

+1:有意思。我認爲這就是setXXX如何與null一起工作,但我從來沒有真正測試它或閱讀它的文檔。 – Powerlord 2009-08-31 13:45:06

+1

我不假設有像myPreparedStatement.setInteger(myIntegerObject)(雖然我看到確切的方法名稱不存在)的情況下,我想要使用一個潛在的空整數?否則,我將不得不使用if/else語句,以另一種方式調用.setInt()和.setNull(),這看起來有點乏味。 – 2012-05-22 02:10:54

+0

@ardave,是的,我的意思是我的最後一段 – djna 2012-05-22 03:58:54

12

最後我做了一個小測試,當我編程它時,我發現在沒有setNull(..)方法的情況下,沒有辦法爲Java基元設置空值。對於對象左右逢源

setNull(..) 

set<ClassName>(.., null)) 

行爲相同的方式。

59

但要注意這一點....

Long nullLong = null; 

preparedStatement.setLong(nullLong); 

-thows空指針exception-

因爲樣機是

setLong(long) 

setLong(Long) 

不錯一個趕上你呃。

3

你也可以考慮使用preparedStatement.setObject(index,value,type);