Java PreparedStatement提供了显式设置Null值的可能性。这种可能性是:
prepStmt.setNull(parameterIndex, Types.VARCHAR);
此调用的语义是否与使用带有null参数的特定setType时的语义相同?
prepStmt.setString(null);
?
Answers:
本指南说:
6.1.5发送JDBC NULL作为IN参数
setNull方法允许程序员将JDBC NULL(通用SQL NULL)值作为IN参数发送到数据库。但是请注意,仍然必须指定参数的JDBC类型。
当将Java空值传递给setXXX方法(如果它将Java对象作为参数)时,JDBC NULL也将发送到数据库。但是,只有指定了JDBC类型时,方法setObject才能采用null值。
所以是的,它们是等效的。
preparedStatement.setNull(index, java.sql.Types.NULL);
应该适用于任何类型。尽管在某些情况下,失败会在服务器端发生,例如:对于SQL:
COALESCE(?, CURRENT_TIMESTAMP)
Oracle 18XE
失败并输入了错误的类型:Expected DATE
,got-STRING
这是完全有效的失败;
底线:如果您致电,最好知道类型 .setNull()