правильный способ установить для параметра PreparedStatement значение null в postgres - PullRequest
1 голос
/ 26 мая 2011

я использую JDBC4 (поверх JDK6) для подключения к postgresql 9.0, используя их последний драйвер JDBC4.

conn = dpaDs.getConnection();
PreparedStatement stmt = conn.prepareStatement("delete from fss where f_id=? and f_lastmodified=?");
UUID target = UUID.fromString("8c5c5ac2-3a2a-49f3-ae48-29226d6ea3e7");
stmt.setObject(1, target, 1111);
//non of these work
//stmt.setNull(2,93);
//stmt.setObject(2,null, 93);
//stmt.setObject(2,null, java.sql.Types.NULL);
//stmt.setNull(2, java.sql.Types.NULL);
int rowCount = stmt.executeUpdate();
int g = 8;

Как правильно установить для второго параметра значение NULL? я знаю, что могу использовать «где ... f_lastmodified is null», но нет ли способа обойти это?

Ответы [ 2 ]

3 голосов
/ 26 мая 2011

Это не сработает.

Сравнение NULL нельзя выполнить с помощью оператора =. Если вы хотите проверить на NULL, вы должны использовать and f_lastmodified IS NULL.

Нельзя использовать параметр в подготовленном операторе для условия IS NULL.

0 голосов
/ 17 февраля 2016

Если вы используете именованные параметры (например, p вместо?) Вместо позиционных, то вы можете сделать следующее:

((:p is null and f_lastmodified is null) or f_lastmodified = :p)

Что немного неудобно, но работа выполнена.Я не пробовал это с jdbc, только Npgsql на .net, но я думаю, что это должно быть то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...