Necesitas usar:
preparedStatement.executeQuery();
en lugar de
preparedStatement.executeQuery(login);
cuando pasa una cadena a executeQuery()
eso la consulta se ejecuta literalmente y, por lo tanto, el ?
se envía a la base de datos que luego crea el error. Al pasar la cadena de consulta, no está ejecutando la instrucción preparada "almacenada en caché" para la que pasó los valores.