PreparedStatement setNull (..)

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

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

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

prepStmt.setString(null)

?

Ответ 1

Этот guide говорит:

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

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

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

Ответ 2

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

Long nullLong = null;

preparedStatement.setLong( nullLong );

-отключает исключение null-указателя -

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

setLong( long )   

НЕ

setLong( Long )

Славный, чтобы поймать тебя.

Ответ 3

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

setNull(..)

и

set<ClassName>(.., null)) 

ведут себя одинаково.

Ответ 4

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