Java PreparedStatement 提供了显式设置 Null 值的可能性。这种可能性是:
prepStmt.setNull(parameterIndex, Types.VARCHAR);
此调用的语义与使用带有 null 参数的特定 setType 时的语义是否相同?
prepStmt.setString(null);
?
Java PreparedStatement 提供了显式设置 Null 值的可能性。这种可能性是:
prepStmt.setNull(parameterIndex, Types.VARCHAR);
此调用的语义与使用带有 null 参数的特定 setType 时的语义是否相同?
prepStmt.setString(null);
?
但请注意这一点....
Long nullLong = null;
preparedStatement.setLong( nullLong );
- 抛出空指针异常 -
因为原型是
setLong( long )
不是
setLong( Long )
很高兴能抓住你,嗯。
本指南说:
6.1.5 将 JDBC NULL 作为 IN 参数发送
setNull 方法允许程序员将 JDBC NULL(通用 SQL NULL)值作为 IN 参数发送到数据库。但是请注意,仍然必须指定参数的 JDBC 类型。
当将 Java 空值传递给 setXXX 方法(如果它将 Java 对象作为参数)时,JDBC NULL 也将被发送到数据库。但是,只有在指定 JDBC 类型时,方法 setObject 才能采用空值。
所以是的,它们是等价的。
最后我做了一个小测试,当我在编程时,我想到了,如果没有 setNull(..) 方法,就无法为 Java 原语设置空值。对于对象双向
setNull(..)
和
set<ClassName>(.., null))
行为方式相同。
你也可以考虑使用preparedStatement.setObject(index,value,type);
preparedStatement.setNull(index, java.sql.Types.NULL);
这应该适用于任何类型。尽管在某些情况下失败发生在服务器端,例如:对于 SQL:
COALESCE(?, CURRENT_TIMESTAMP)
Oracle 18XE
以错误的类型失败:预期DATE
,得到STRING
——这是一个完全有效的失败;
底线:如果你打电话,最好知道类型.setNull()
更新:stackoverflow 需要雇用更多的编辑来在我的帖子中添加\删除标点符号