Musíte použít:
preparedStatement.executeQuery();
místo
preparedStatement.executeQuery(login);
když předáte řetězec do executeQuery()
to dotaz se provede doslovně a tedy ?
je odeslána do databáze, která pak vytvoří chybu. Předáním řetězce dotazu neprovedete „uložený“ připravený příkaz, pro který jste předali hodnoty.