PreparedStatement setNull (..) - PullRequest
       6

PreparedStatement setNull (..)

77 голосов
/ 31 августа 2009

Java PreparedStatement предоставляет возможность явно установить нулевое значение. Эта возможность:

prepStmt.setNull(parameterIndex, Types.VARCHAR);

Является ли семантика этого вызова такой же, как при использовании определенного setType с нулевым параметром?

prepStmt.setString(null);

Ответы [ 4 ]

69 голосов
/ 03 марта 2012

но следите за этим ....

Long nullLong = null;

preparedStatement.setLong( nullLong );

- показывает исключение нулевого указателя -

потому что прототип

setLong( long )   

НЕ

setLong( Long )

приятно тебя поймать ах.

67 голосов
/ 31 августа 2009

Это руководство говорит:

6.1.5 Отправка JDBC NULL в качестве параметра IN

Метод setNull позволяет программисту отправлять значение JDBC NULL (универсальный SQL NULL) в базу данных в качестве параметра IN. Однако обратите внимание, что по-прежнему необходимо указывать тип JDBC параметра.

JDBC NULL также будет отправляться в базу данных, когда нулевое значение Java передается методу setXXX (если в качестве аргументов используются объекты Java). Однако метод setObject может принимать нулевое значение, только если указан тип JDBC.

Так что да, они эквивалентны.

13 голосов
/ 01 сентября 2009

Наконец я провел небольшой тест, и пока я программировал его, мне пришло в голову, что без метода setNull (..) не было бы никакого способа установить нулевые значения для примитивов Java. Для объектов оба пути

setNull(..)

и

set<ClassName>(.., null)) 

ведут себя так же.

6 голосов
/ 24 ноября 2015

Вы также можете рассмотреть возможность использования preparedStatement.setObject(index,value,type);

...