PreparedStatement setNull(..)


86

Java PreparedStatementは、Null値を明示的に設定する可能性を提供します。この可能性は次のとおりです。

prepStmt.setNull(parameterIndex, Types.VARCHAR);

この呼び出しのセマンティクスは、nullパラメーターを指定して特定のsetTypeを使用する場合と同じですか?

prepStmt.setString(null);

回答:


73

このガイドによると:

6.1.5INパラメータとしてJDBCNULLを送信する

setNullメソッドを使用すると、プログラマーはJDBC NULL(汎用SQL NULL)値をINパラメーターとしてデータベースに送信できます。ただし、パラメータのJDBCタイプを指定する必要があることに注意してください。

Java null値がsetXXXメソッドに渡されると(Javaオブジェクトを引数として取る場合)、JDBCNULLもデータベースに送信されます。ただし、メソッドsetObjectは、JDBCタイプが指定されている場合にのみnull値をとることができます。

そうです、それらは同等です。


2
+1:興味深い。これがsetXXXがnullで機能する方法だと思いましたが、実際にテストしたり、ドキュメントを読んだりしたことはありません。
パワーロード2009

2
nullの可能性のある整数を使用したい場合は、myPreparedStatement.setInteger(myIntegerObject)のようなものがあるとは思いません(正確なメソッド名は存在しないことがわかりますが)。それ以外の場合は、if / elseステートメントを使用して、一方の方法で.setInt()を呼び出し、もう一方の方法で.setNull()を呼び出す必要がありますが、これは少し面倒なようです。

@ardave、はい、それが私の最後の段落の意味です
djna 2012年

1
私はその古いことを知っていますが、そのリンクは壊れています。
ムーブ2016

1
新しいリンク:PreparedStatement
candidus 2017年

76

しかし、これに気をつけてください....

Long nullLong = null;

preparedStatement.setLong( nullLong );

-nullポインタ例外をスローします-

プロトタイプは

setLong( long )   

ない

setLong( Long )

ええ、あなたを捕まえるのにいい人。


それが実際に私をここに連れてきた例です。
sf_jeff

13

最後に、小さなテストを行いました。プログラミング中に、setNull(..)メソッドがないと、Javaプリミティブにnull値を設定する方法がないことがわかりました。オブジェクトの場合は双方向

setNull(..)

そして

set<ClassName>(.., null)) 

同じように動作します。


9

使用を検討することもできます preparedStatement.setObject(index,value,type);


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

それはどんなタイプでも機能するはずです。場合によっては、次のようにサーバー側で障害が発生します。SQLの場合:

COALESCE(?, CURRENT_TIMESTAMP)

Oracle 18XE間違ったタイプで失敗します:expected DATE、got--STRINGこれは完全に有効な失敗です。

結論:電話する場合はタイプを知っておくとよいでしょう .setNull()

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.