Схожий вопрос: Get null == null в SQL. Но этот ответ требует, чтобы поисковое значение было написано 2 раза (то есть: 2 знака вопроса в моем PreparedStatement)!?
Ответы, занявшие второе место и последующие, дают способ сделать это, не привязывая значение поиска дважды:
SELECT * FROM ROUTERS
WHERE coalesce(ROUTER_ADDRESS, '') = coalesce( ?, '');
Обратите внимание, что для этого требуется фиктивное значение, которое никогда не может быть допустимым значением столбца (это «вне диапазона»); Я использую пустую строку. Если у вас нет такого значения, вам придется смириться с привязкой значения дважды:
SELECT * FROM ROUTERS
WHERE ROUTER_ADDRESS = ? or (ROUTER_ADDRESS is null and ? is null);