2009-08-31 9 views
62

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

prepStmt.setNull(<n>, Types.VARCHAR) 

は、NULL値ではsetTypeを使用したときと同じこの呼び出しの意味はありますか?

prepStmt.setString(null) 

答えて

53

このguideは言う:INパラメータとしてJDBC NULLを送信

6.1.5

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

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

+1

+1:面白いと思うかもしれません。私はそれがsetXXXがnullsで動作する方法だと仮定しましたが、実際にそれをテストしたり、ドキュメントを読むことは決してありませんでした。 – Powerlord

+1

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

+0

@ardave、はい、それは私の最終段落の意味です – djna

12

最後に私は小さなテストを行いました。プログラミングしていたときにsetNull(..)メソッドがなければ、Javaプリミティブにnull値を設定する方法はありませんでした。オブジェクトの両方の方法

setNull(..) 

set<ClassName>(.., null)) 

は同じように振る舞います。

59

が、これに気を付ける....

Long nullLong = null; 

preparedStatement.setLong(nullLong); 

はPROTYPEが

setLong(Long) 

素敵

setLong(long) 

されていないため、exception-

NULLポインタを-thows 1つはあなたをキャッチするええ。

3

preparedStatement.setObject(index,value,type);

関連する問題