PreparedStatement.setObject的 Javadoc 说只传递空值是不安全的,并建议使用 setNull 代替,这需要传递列 DB 类型。
由于在 Java 中判断空值的类型并不是一件容易的事,我想知道是否有任何资源列出了为流行的数据库调用带有空值的 setObject 的安全性?
PreparedStatement.setObject的 Javadoc 说只传递空值是不安全的,并建议使用 setNull 代替,这需要传递列 DB 类型。
由于在 Java 中判断空值的类型并不是一件容易的事,我想知道是否有任何资源列出了为流行的数据库调用带有空值的 setObject 的安全性?
oracle 的 java docs 上有一个相当有趣的页面。
阿比纳夫
根据 EJP 的评论编辑:
根据 Java 文档,以下 setObject 声明更好并推荐:
void setObject(int parameterIndex, Object x, int targetSqlType)
注意:并非所有数据库都允许将非类型 Null 发送到后端。为了获得最大的可移植性,应该使用 setNull 或 setObject(int parameterIndex, Object x, int sqlType) 方法来代替 setObject(int parameterIndex, Object x)。
可以使用上面链接的映射列表来识别对象类型。