Vous devez utiliser :
preparedStatement.executeQuery();
au lieu de
preparedStatement.executeQuery(login);
lorsque vous transmettez une chaîne à executeQuery() que la requête est exécutée littéralement et donc le ? est envoyé à la base de données qui crée alors l'erreur. En transmettant la chaîne de requête, vous n'exécutez pas l'instruction préparée "en cache" pour laquelle vous avez transmis les valeurs.