Foros del Web » Programación para mayores de 30 ;) » Java »

problema al elminar en arrayList

Estas en el tema de problema al elminar en arrayList en el foro de Java en Foros del Web. Hola, tengo un problema al eliminar de un arrayList. Os cuento, para crear un objeto de la clase Profesor accedo a la tabla Profesor para ...
  #1 (permalink)  
Antiguo 11/12/2011, 05:43
 
Fecha de Ingreso: julio-2011
Mensajes: 55
Antigüedad: 12 años, 9 meses
Puntos: 1
problema al elminar en arrayList

Hola, tengo un problema al eliminar de un arrayList. Os cuento, para crear un objeto de la clase Profesor accedo a la tabla Profesor para recoger los datos de los profesores y despues hago un inner join entre dos tablas para tener las materias que da cada profesor. Todo esto lo hace bien porque cuando yo imprimo por pantalla la linea que veis muestra los datos perfectamente, el problema es que en otro método en el cual accedo a estos objetos, lo datos(nombre, dni...) lo muestra bien, pero cuando accedo al arraylist del objeto profesor(la lista de materias) me dice que está vacío.
El problema creo que es cuando elimino del arraylist, ya que si quito esa parte lo que hace en esa otra función es mostrarme las materias que dan TODOS los profesores, es decir añade las de un profesor encima de otro(por eso cuando cambia de profesor elimino la lista de materias.

¿Alguien sabe que puede suceder?

Código:
        /* DECLARACIÓN VARIABLES */
        String SQL = null, SQLMat = null;
        Statement stmt = null, stmtMat = null;
        ResultSet rs = null, rsMat = null;
        long id = 0;
        ArrayList <Materia> listaMat = new ArrayList <Materia>();
 

        .........


        /* RECUPERAMOS LOS DATOS DE PROFESORES*/
        SQL = "SELECT * FROM Profesor WHERE obsoleto_prof=false";
        stmt = conex.createStatement();
        rs = stmt.executeQuery(SQL);
        /* AÑADIR CURSOS A LISTA PROFESORES */
        while (rs.next()) {

            id = rs.getLong("id_prof");
            
            /* RECUPERAMOS LOS DATOS DE LAS MATERIAS */
            modListaMat.removeAllElements();
            SQLMat = "SELECT * FROM ensenha INNER JOIN Materia ON ensenha.id_mat=Materia.id_mat WHERE ensenha.id_prof="+id+""; // Recuperamos las materias asociadas al Profesor
            stmtMat = conex.createStatement();
            rsMat = stmtMat.executeQuery(SQLMat);

            while (rsMat.next()) {
                Materia mat = new Materia(rsMat.getLong("id_mat"), rsMat.getString("nombre_mat"), rsMat.getBoolean("obsoleto_mat"));
                listaMat.add(mat);
            }

            Profesor prof = new Profesor(id, rs.getString("nombre_prof"), rs.getString("apellido_prof"), rs.getString("dni_prof"), rs.getInt("horas_prof"), rs.getString("fechaContr_prof"),  rs.getBoolean("obsoleto_prof"), listaMat);
            modLista.addElement(prof);

            for ( int i=0 ; i<prof.getListaMaterias().size() ; i++)
                    System.out.println(id+"-"+prof.getListaMaterias().get(i).getNombre());
          
            Iterator i = listaMat.iterator();
            while (i.hasNext()) {
                i.next();
                i.remove();
            }

      }

       ........
  #2 (permalink)  
Antiguo 12/12/2011, 08:46
 
Fecha de Ingreso: julio-2011
Mensajes: 55
Antigüedad: 12 años, 9 meses
Puntos: 1
Respuesta: problema al elminar en arrayList

nadie logra ver nada?
  #3 (permalink)  
Antiguo 12/12/2011, 10:04
 
Fecha de Ingreso: septiembre-2007
Mensajes: 268
Antigüedad: 16 años, 7 meses
Puntos: 8
Respuesta: problema al elminar en arrayList

Cita:
Iniciado por esebayolo Ver Mensaje
Hola, tengo un problema al eliminar de un arrayList. Os cuento, para crear un objeto de la clase Profesor accedo a la tabla Profesor para recoger los datos de los profesores y despues hago un inner join entre dos tablas para tener las materias que da cada profesor. Todo esto lo hace bien porque cuando yo imprimo por pantalla la linea que veis muestra los datos perfectamente, el problema es que en otro método en el cual accedo a estos objetos, lo datos(nombre, dni...) lo muestra bien, pero cuando accedo al arraylist del objeto profesor(la lista de materias) me dice que está vacío.
El problema creo que es cuando elimino del arraylist, ya que si quito esa parte lo que hace en esa otra función es mostrarme las materias que dan TODOS los profesores, es decir añade las de un profesor encima de otro(por eso cuando cambia de profesor elimino la lista de materias.

¿Alguien sabe que puede suceder?

Código:
        /* DECLARACIÓN VARIABLES */
        String SQL = null, SQLMat = null;
        Statement stmt = null, stmtMat = null;
        ResultSet rs = null, rsMat = null;
        long id = 0;
       
 

        .........


        /* RECUPERAMOS LOS DATOS DE PROFESORES*/
        SQL = "SELECT * FROM Profesor WHERE obsoleto_prof=false";
        stmt = conex.createStatement();
        rs = stmt.executeQuery(SQL);
        /* AÑADIR CURSOS A LISTA PROFESORES */
        while (rs.next()) {

             ArrayList <Materia> listaMat = new ArrayList <Materia>();

            id = rs.getLong("id_prof");
            
            
            /* RECUPERAMOS LOS DATOS DE LAS MATERIAS */
            modListaMat.removeAllElements();
            SQLMat = "SELECT * FROM ensenha INNER JOIN Materia ON ensenha.id_mat=Materia.id_mat WHERE ensenha.id_prof="+id+""; // Recuperamos las materias asociadas al Profesor
            stmtMat = conex.createStatement();
            rsMat = stmtMat.executeQuery(SQLMat);

            while (rsMat.next()) {
                Materia mat = new Materia(rsMat.getLong("id_mat"), rsMat.getString("nombre_mat"), rsMat.getBoolean("obsoleto_mat"));
                listaMat.add(mat);
            }

            Profesor prof = new Profesor(id, rs.getString("nombre_prof"), rs.getString("apellido_prof"), rs.getString("dni_prof"), rs.getInt("horas_prof"), rs.getString("fechaContr_prof"),  rs.getBoolean("obsoleto_prof"), listaMat);
            modLista.addElement(prof);

            for ( int i=0 ; i<prof.getListaMaterias().size() ; i++)
                    System.out.println(id+"-"+prof.getListaMaterias().get(i).getNombre());         
           
            }

      }

       ........

Si el arrayList solo lo usas en el while puedes declararlo dentro del while y asi te lo crea vacio y no tienes que borrarlo al final. Sino el problema es que tienes una referencia a un objeto que comparten todos los profesores y cuando borras una materia de uno borras en todos y cuando añades a uno lo añades a todos.


Tambien puedes tener un atributo en la clase profesor de la clase Arraylist con las materias(Este se creara vacio pero no ha null) y se lo quitas al constructor de profesor y tienes un metodo y tienes un metodo en la clase que añade y borra materias, y en el while de materias se añade al profesor y no a un Arraylist.
Tienes que hacer el new del profesor antes del while que recorre las materias.
  #4 (permalink)  
Antiguo 12/12/2011, 14:43
 
Fecha de Ingreso: julio-2011
Mensajes: 55
Antigüedad: 12 años, 9 meses
Puntos: 1
Respuesta: problema al elminar en arrayList

gracias!! metiendo el constructor del arraylist en el while se solucionó!

Etiquetas: arraylist, sql, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 20:47.