As respostas em segundo lugar e subsequentes fornecem um método para fazer isso sem vincular o valor de pesquisa duas vezes:
SELECT * FROM ROUTERS
WHERE coalesce(ROUTER_ADDRESS, '') = coalesce( ?, '');
Observe que isso requer um valor fictício que nunca pode ser um valor de coluna válido (que está "fora de banda"); Estou usando a string vazia. Se você não tiver esse valor, terá que aturar a vinculação do valor duas vezes:
SELECT * FROM ROUTERS
WHERE ROUTER_ADDRESS = ? or (ROUTER_ADDRESS is null and ? is null);