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.