Du måste använda:
preparedStatement.executeQuery();
istället för
preparedStatement.executeQuery(login);
när du skickar in en sträng till executeQuery() det frågan exekveras bokstavligen och därmed ? skickas till databasen som sedan skapar felet. Genom att skicka frågesträng kör du inte den "cachade" förberedda satsen för vilken du skickade värdena.