Java PreparedStatement提供了一種明確設置Null值的可能性。這種可能性是:PreparedStatement setNull(..)
prepStmt.setNull(<n>, Types.VARCHAR)
這個調用的語義與使用setType和空值相同嗎?
prepStmt.setString(null)
?
Java PreparedStatement提供了一種明確設置Null值的可能性。這種可能性是:PreparedStatement setNull(..)
prepStmt.setNull(<n>, Types.VARCHAR)
這個調用的語義與使用setType和空值相同嗎?
prepStmt.setString(null)
?
這guide說:
6.1.5發送JDBC NULL作爲IN參數
setNull方法允許程序員發送JDBC NULL(通用SQL NULL)值到數據庫的IN參數。但是,請注意,還必須指定參數的JDBC類型。
將Java空值傳遞給setXXX方法(如果它需要Java對象作爲參數),JDBC NULL也會發送到數據庫。但是,只有在指定了JDBC類型的情況下,setObject方法纔可以取null值。
最後我做了一個小測試,當我編程它時,我發現在沒有setNull(..)方法的情況下,沒有辦法爲Java基元設置空值。對於對象左右逢源
setNull(..)
和
set<ClassName>(.., null))
行爲相同的方式。
但要注意這一點....
Long nullLong = null;
preparedStatement.setLong(nullLong);
-thows空指針exception-
因爲樣機是
setLong(long)
不
setLong(Long)
不錯一個趕上你呃。
你也可以考慮使用preparedStatement.setObject(index,value,type);
+1:有意思。我認爲這就是setXXX如何與null一起工作,但我從來沒有真正測試它或閱讀它的文檔。 – Powerlord 2009-08-31 13:45:06
我不假設有像myPreparedStatement.setInteger(myIntegerObject)(雖然我看到確切的方法名稱不存在)的情況下,我想要使用一個潛在的空整數?否則,我將不得不使用if/else語句,以另一種方式調用.setInt()和.setNull(),這看起來有點乏味。 – 2012-05-22 02:10:54
@ardave,是的,我的意思是我的最後一段 – djna 2012-05-22 03:58:54