paw*_*que 77 java jdbc prepared-statement
Java PreparedStatement提供了明确设置Null值的可能性.这种可能性是:
prepStmt.setNull(parameterIndex, Types.VARCHAR);
Run Code Online (Sandbox Code Playgroud)
此调用的语义是否与使用具有null参数的特定setType时的语义相同?
prepStmt.setString(null);
Run Code Online (Sandbox Code Playgroud)
?
小智 71
但要小心......
Long nullLong = null;
preparedStatement.setLong( nullLong );
Run Code Online (Sandbox Code Playgroud)
-thows null指针异常 -
因为原型是
setLong( long )
Run Code Online (Sandbox Code Playgroud)
不
setLong( Long )
Run Code Online (Sandbox Code Playgroud)
很高兴能赶上你的呃.
djn*_*jna 67
本指南说:
6.1.5将JDBC NULL作为IN参数发送
setNull方法允许程序员将JDBC NULL(通用SQL NULL)值作为IN参数发送到数据库.但请注意,仍必须指定参数的JDBC类型.
当Java null值传递给setXXX方法时(如果它将Java对象作为参数),JDBC NULL也将被发送到数据库.但是,只有指定了JDBC类型,方法setObject才能获取空值.
所以是的,他们是等同的.
paw*_*que 13
最后我做了一个小测试,当我编程时,我想到了,没有setNull(..)方法就没有办法为Java原语设置空值.对于对象双向
setNull(..)
Run Code Online (Sandbox Code Playgroud)
和
set<ClassName>(.., null))
Run Code Online (Sandbox Code Playgroud)
表现方式相同.
小智 10
preparedStatement.setNull(index, java.sql.Types.NULL);
Run Code Online (Sandbox Code Playgroud)
这应该适用于任何类型。尽管在某些情况下失败发生在服务器端,例如:对于 SQL:
COALESCE(?, CURRENT_TIMESTAMP)
Run Code Online (Sandbox Code Playgroud)
Oracle 18XE
以错误的类型失败:预期DATE
,得到STRING
——这是一个完全有效的失败;
底线:如果你打电话知道类型是很好的 .setNull()
归档时间: |
|
查看次数: |
124984 次 |
最近记录: |