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);