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.