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.