准备语句 setNull(..)

发布于 2024-08-04 06:12:24 字数 241 浏览 6 评论 0原文

JavaPreparedStatement 提供了显式设置 Null 值的可能性。这种可能性是:

prepStmt.setNull(parameterIndex, Types.VARCHAR);

此调用的语义与使用带有 null 参数的特定 setType 时的语义相同吗?

prepStmt.setString(null);

Java PreparedStatement provides a possibility to explicitely set a Null value. This possibility is:

prepStmt.setNull(parameterIndex, Types.VARCHAR);

Are the semantics of this call the same as when using a specific setType with a null parameter?

prepStmt.setString(null);

?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

轮廓§ 2024-08-11 06:12:24

这个指南说:

6.1.5 将 JDBC NULL 作为 IN 参数发送

setNull 方法允许程序员将 JDBC NULL(通用 SQL NULL)值作为 IN 参数发送到数据库。但请注意,仍然必须指定参数的 JDBC 类型。

当 Java null 值传递给 setXXX 方法时(如果它采用 Java对象作为参数)。但是,仅当指定了 JDBC 类型时,setObject 方法才可以采用 null 值。

所以是的,它们是等价的。

This guide says:

6.1.5 Sending JDBC NULL as an IN parameter

The setNull method allows a programmer to send a JDBC NULL (a generic SQL NULL) value to the database as an IN parameter. Note, however, that one must still specify the JDBC type of the parameter.

A JDBC NULL will also be sent to the database when a Java null value is passed to a setXXX method (if it takes Java objects as arguments). The method setObject, however, can take a null value only if the JDBC type is specified.

So yes they're equivalent.

柳若烟 2024-08-11 06:12:24

但请注意这一点...-

Long nullLong = null;

preparedStatement.setLong( nullLong );

抛出空指针异常-

因为原型不是

setLong( long )   

一个

setLong( Long )

很好的模型来抓住你。

but watch out for this....

Long nullLong = null;

preparedStatement.setLong( nullLong );

-thows null pointer exception-

because the protype is

setLong( long )   

NOT

setLong( Long )

nice one to catch you out eh.

微暖i 2024-08-11 06:12:24

最后我做了一个小测试,在编程时我突然想到,如果没有 setNull(..) 方法,就无法为 Java 原语设置 null 值。对于对象来说,两种方式

setNull(..)

set<ClassName>(.., null)) 

行为方式都是相同的。

Finally I did a small test and while I was programming it it came to my mind, that without the setNull(..) method there would be no way to set null values for the Java primitives. For Objects both ways

setNull(..)

and

set<ClassName>(.., null)) 

behave the same way.

同尘 2024-08-11 06:12:24
preparedStatement.setNull(index, java.sql.Types.NULL);

这应该适用于任何类型。
尽管在某些情况下故障发生在服务器端,例如:
对于 SQL:

COALESCE(?, CURRENT_TIMESTAMP)

Oracle 18XE 失败,类型错误:预期的日期,得到的字符串——这是一个完全有效的失败;

底线:如果您调用 .setNull(),最好知道类型。

preparedStatement.setNull(index, java.sql.Types.NULL);

that should work for any type.
Though in some cases failure happens on the server-side, like:
for SQL:

COALESCE(?, CURRENT_TIMESTAMP)

Oracle 18XE fails with the wrong type: expected DATE, got STRING -- that is a perfectly valid failure;

Bottom line: it is good to know the type if you call .setNull().

北渚 2024-08-11 06:12:24

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

You could also consider using preparedStatement.setObject(index,value,type);

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文