PreparedStatement setNull(..)

Java PreparedStatement提供了一个明确设置Null值的可能性。 这种可能性是:

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

这个调用的语义是否与使用一个null值的setType相同?

 prepStmt.setString(null) 

本指南说:

6.1.5作为IN参数发送JDBC NULL

setNull方法允许程序员以IN参数的forms向数据库发送JDBC NULL(通用SQL NULL)值。 但是请注意,还必须指定参数的JDBCtypes。

当Java空值传递给setXXX方法(如果需要Java对象作为参数),JDBC NULL也将被发送到数据库。 但是,只有在指定了JDBCtypes的情况下,setObject方法才能取null值。

但要小心这个….

 Long nullLong = null; preparedStatement.setLong( nullLong ); 

– 空指针exception –

因为原型是

 setLong( long ) 

 setLong( Long ) 

很好的一个赶上你呃。

最后,我做了一个小testing,在编程时,我发现没有setNull(..)方法,就没有办法为Java基元设置空值。 对于对象的两种方式

 setNull(..) 

 set<ClassName>(.., null)) 

performance方式也一样。

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