Трябва да използвате:
preparedStatement.executeQuery();
вместо
preparedStatement.executeQuery(login);
когато подадете низ към executeQuery()
това заявката се изпълнява буквално и по този начин ?
се изпраща към базата данни, която след това създава грешката. Предавайки низ на заявка, вие не изпълнявате "кеширания" подготвен оператор, за който сте предали стойностите.