elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  [RESUELTO]No encuentro error, intentando borrar de un resultset
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [RESUELTO]No encuentro error, intentando borrar de un resultset  (Leído 9,741 veces)
|Miguel|

Desconectado Desconectado

Mensajes: 217



Ver Perfil
[RESUELTO]No encuentro error, intentando borrar de un resultset
« en: 21 Febrero 2012, 16:02 pm »

Hola a todos, ¿qué tal?

Bueno, llevo un par de días como un loco y no doy con el fallo en mi programa... os cuento un poco de qué va la historia. Tengo una BBDD de empleados y departamentos con una relación 1:N donde cada empleado tiene un solo departamento y los departamentos de 0 a N empleados... Pues bien, estoy programando en Java un aplicación sencilla que permita añadir, eliminar y modificar datos de cualquier empleado/departamento.

Lo tengo todo acabado, excepto un JFrame en el que arriba tengo un JTextField con el nombre de un departamento y debajo de éste un JTable en el que se muestran los datos de todos los empleados de ese departamento. Hay también botones para pasar al siguiente, anterior, primer y último departamento, con sus eventos correspondientes que vacían y rellenan de nuevo la tabla con los empleados correspondientes al departamento activo.

Y por último tengo un botón que me permitiría borrar de la BBDD el empleado que esté seleccionado. Este es el código:

Código
  1. private void jtblEmpleMouseClicked(java.awt.event.MouseEvent evt) {
  2.        System.out.println("Entro en evento");
  3.        int fila=jtblEmple.getSelectedRow();
  4.        System.out.println("Fila seleccionada: "+fila);
  5.        if(fila >= 0){
  6.            System.out.println("entro en if");
  7.            try{
  8.                System.out.println("entro en el try");
  9.                for(int i=0; i<fila+1; i++){
  10.                    System.out.println("Empleado: '"+rsE.getString("APELLIDO")+"'. Vuelta número: "+i);
  11.                    rsE.next();                    
  12.                }
  13.                System.out.println("Voy a borrar");
  14.                //rsE.deleteRow(); línea comentada para no borrar registros en pruebas y quedarme con 0 empleados... xD
  15.                //(aún así, esta línea me da unas veces la excepción de 'No data found' y otras la de 'estado del cursor no válido').
  16.                System.out.println("He borrado.");
  17.            }catch(Exception e){JOptionPane.showConfirmDialog(null, e, "Error de borrado", JOptionPane.PLAIN_MESSAGE);}
  18.            finally{
  19.                System.out.println("llego al finally");
  20.                limpiaTabla();
  21.                rellenaTabla();
  22.                System.out.println("salgo del finally");
  23.            }
  24.        }
  25.        else
  26.            JOptionPane.showConfirmDialog(null, "Seleccione un departamento para eliminarlo.", "Error de borrado", JOptionPane.PLAIN_MESSAGE);
  27.    }
  28.  

Donde rsE es un ResultSet con todos los empleados del departamento activo y rsD es otro ResultSet con todos los departamentos. Todos esos println sobran, los he usado para ver qué hace la aplicación y esta me devuelve lo siguiente:

Cita de: NetBeans
run:
Entro en evento
Fila seleccionada: 1
entro en if
entro en el try
// aquí me salta la Excepción e
llego al finally
salgo del finally
BUILD SUCCESSFUL (total time: 10 seconds)

Este código funcionaba perfectamente para borrar departamentos... Y así llevo un par de días. Hoy he pedido ayuda al profesor y ha estado una hora  mirando y tocando sin sacar absolutamente nada, lo cual me hace pensar que seguramente será algún fallo bastante estúpido...

Gracias a todos.


« Última modificación: 27 Febrero 2012, 14:00 pm por |Miguel| » En línea

HdM


Desconectado Desconectado

Mensajes: 1.674



Ver Perfil
Re: No encuentro error, intentando borrar de un resultset
« Respuesta #1 en: 21 Febrero 2012, 16:39 pm »

Buenas.

Código
  1. for(int i=0; i<fila+1; i++){
  2.                    System.out.println("Empleado: '"+rsE.getString("APELLIDO")+"'. Vuelta número: "+i);
  3.                    rsE.next();                    
  4.                }
  5.                System.out.println("Voy a borrar");
  6.                //rsE.deleteRow(); línea comentada para no borrar registros en pruebas y quedarme con 0 empleados... xD
  7.                //(aún así, esta línea me da unas veces la excepción de 'No data found' y otras la de 'estado del cursor no válido').
  8.                System.out.println("He borrado.");

Creo que es debido a que antes de empezar el for, no sabes en qué posición se encuentra el rsE, de modo que después de salir del bucle y tras los sucesivos rsE.next() te deja el resultset en EOF, sin registro activo y por eso, al intentar eliminar te salta el error. Creo que antes de empezar el bucle, deberías comprobar que el rsE contiene registros y hacer un movefirst. Ése podría ser un error. Otro podría ser la condición del for, ¿no debería ser i < fila en vez de i < fila +1?

Saludos.


En línea

- Nice to see you again -
|Miguel|

Desconectado Desconectado

Mensajes: 217



Ver Perfil
Re: No encuentro error, intentando borrar de un resultset
« Respuesta #2 en: 21 Febrero 2012, 16:51 pm »

Hola Bulld0z3r, gracias por contestar.

rsE se carga con el constructor del JFrame donde estoy trabajando mediante el siguiente método:
Código
  1. static void cargaEmpleados(){
  2.        try{
  3.            int id_dep = rsD.getInt("dept_no");
  4.            seleccionaEmple(id_dep);
  5.            rsE.first();
  6.        }catch(Exception e){System.out.println("Error capturando depto para la tabla --> "+e);}
  7.  
  8.    }
  9.  

A ese método lo llamo, como he dicho, en el constructor del JFrame así como en todos los eventos de los botones primero, último, anterior y siguiente. Así me aseguro que rsE tenga siempre datos y además me posiciono en el primero de ellos.

En cuanto a la condición del for, antes la tenía así pero el método getSelectedRow() devuelve enteros a partir del 0 (éste incluido) si hay algo seleccionado, es decir, si cambio la condición y está seleccionada la primera fila no entro en el bucle, ¿me equivoco?

Saludos.
En línea

HdM


Desconectado Desconectado

Mensajes: 1.674



Ver Perfil
Re: No encuentro error, intentando borrar de un resultset
« Respuesta #3 en: 21 Febrero 2012, 17:19 pm »

Buenas.

La condición del for debería ser i<=fila

Saludos.
En línea

- Nice to see you again -
|Miguel|

Desconectado Desconectado

Mensajes: 217



Ver Perfil
Re: No encuentro error, intentando borrar de un resultset
« Respuesta #4 en: 21 Febrero 2012, 17:28 pm »

Sigue sin funcionar.
En este fragmento:
Código
  1. System.out.println("entro en el try");
  2. for(int i=0; i<=fila; i++){
  3.             System.out.println("Empleado: '"+rsE.getString("APELLIDO")+"'. Vuelta número: "+i);
  4.  
imprime la línea de "entro en el try", pero no la otra. Es decir, salta la excepción al intentar rsE.getString("APELLIDO"), supongo. Revisaré mi forma de controlar los resultSet a ver...

Dejo aquí el código completo, por si alguien tiene mucho tiempo libre XD
http://www.mediafire.com/?xnn2pfkdkxfz15e
Versión en .txt: http://www.mediafire.com/?4vtdket2nuer36w
« Última modificación: 21 Febrero 2012, 17:41 pm por |Miguel| » En línea

jperezmonge

Desconectado Desconectado

Mensajes: 24


Chronos Estudios


Ver Perfil
Re: No encuentro error, intentando borrar de un resultset
« Respuesta #5 en: 21 Febrero 2012, 17:55 pm »

Asi lo hago yo, a ver si te puede dar un enfoque distinto

Código
  1. jButtonEliminarUsuario.addActionListener(new java.awt.event.ActionListener() {
  2. public void actionPerformed(java.awt.event.ActionEvent e) {
  3.  
  4. ModeloJTableUsuario modelo = getModeloJTableUsuario();
  5.  
  6. int index = getJTableUsuario().getSelectedRow();
  7.  
  8. // Si se selecciona un elemento en la lista
  9. if (  index >= 0 ) {
  10. modelo.eliminarUsuario(index);
  11. }
  12. }
  13. });
« Última modificación: 21 Febrero 2012, 17:58 pm por jperezmonge » En línea

|Miguel|

Desconectado Desconectado

Mensajes: 217



Ver Perfil
Re: No encuentro error, intentando borrar de un resultset
« Respuesta #6 en: 21 Febrero 2012, 17:58 pm »

jperezmonge, si no me equivoco, eso me borra sólo la fila del JTable, ¿no? Todo lo que estoy haciendo va contra una base de datos.
En línea

jperezmonge

Desconectado Desconectado

Mensajes: 24


Chronos Estudios


Ver Perfil
Re: No encuentro error, intentando borrar de un resultset
« Respuesta #7 en: 21 Febrero 2012, 18:05 pm »

Ahhmmm, yo es que en el modelo del jTable cargo los datos de la base de datos a una colección y desde hay trabajo, lo siento te he ayudado hasta donde yo llego, si no te sirve de nada, lo siento.
« Última modificación: 21 Febrero 2012, 18:15 pm por jperezmonge » En línea

|Miguel|

Desconectado Desconectado

Mensajes: 217



Ver Perfil
Re: No encuentro error, intentando borrar de un resultset
« Respuesta #8 en: 21 Febrero 2012, 18:08 pm »

Gracias, no te preocupes... de todas formas con lo que has dicho estoy pensando otra posibilidad que tal vez funcione... a ver que pasa  :silbar:
En línea

jperezmonge

Desconectado Desconectado

Mensajes: 24


Chronos Estudios


Ver Perfil
Re: No encuentro error, intentando borrar de un resultset
« Respuesta #9 en: 21 Febrero 2012, 18:11 pm »

De esta forma no debería de lanzarte excepción ni estar pendiente de si en la siguiente vuelta esta apuntando a null o no.

prueba a recorrer la consulta de este modo.

Código
  1. dbResulSet = dbStatement.executeQuery("SELECT * from disfruta where usuarioDni = '" + dni2 + "'");
  2. //recorremos la consulta
  3. while(dbResulSet.next()){
  4. //obtengo el identificador
  5. String dni  = dbResulSet.getString(1);
  6. System.out.println(dni);
  7. //obtengo el descripcion
  8. int codigo = dbResulSet.getInt(2);
  9. try {
  10. myData.add(new Disfruta(dni, codigo));
  11. } catch (Exception e) {
  12. e.printStackTrace();
  13. }
  14.  
  15. }
« Última modificación: 21 Febrero 2012, 18:15 pm por jperezmonge » En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problemas intentando borrar CD regrabable
Software
wvb 0 2,904 Último mensaje 1 Diciembre 2005, 17:22 pm
por wvb
Error intentando hookear FindNextFileA
Análisis y Diseño de Malware
fary 2 3,127 Último mensaje 5 Agosto 2011, 13:13 pm
por fary
Ayuda.Error. Intentando multiplicar dos matrices.
Programación C/C++
sofi1 2 3,268 Último mensaje 22 Agosto 2011, 04:11 am
por sofi1
error Operation not allowed after ResultSet closed
Java
josco 0 2,975 Último mensaje 6 Marzo 2012, 01:08 am
por josco
Borrar basura generada por WinXP[RESUELTO]
Windows
тαптяα 5 3,456 Último mensaje 9 Noviembre 2014, 21:30 pm
por тαптяα
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines