Las respuestas en segundo lugar y posteriores brindan un método para hacer esto sin vincular el valor de búsqueda dos veces:
SELECT * FROM ROUTERS
WHERE coalesce(ROUTER_ADDRESS, '') = coalesce( ?, '');
Tenga en cuenta que esto requiere un valor ficticio que nunca puede ser un valor de columna válido (eso es "fuera de banda"); Estoy usando la cadena vacía. Si no tiene ningún valor de este tipo, tendrá que aguantar vincular el valor dos veces:
SELECT * FROM ROUTERS
WHERE ROUTER_ADDRESS = ? or (ROUTER_ADDRESS is null and ? is null);