Autor
|
Tema: [RESUELTO]No encuentro error, intentando borrar de un resultset (Leído 9,741 veces)
|
|Miguel|
Desconectado
Mensajes: 217
|
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: private void jtblEmpleMouseClicked (java. awt. event. MouseEvent evt ) { System. out. println("Entro en evento"); int fila=jtblEmple.getSelectedRow(); System. out. println("Fila seleccionada: "+fila ); if(fila >= 0){ System. out. println("entro en if"); try{ System. out. println("entro en el try"); for(int i=0; i<fila+1; i++){ System. out. println("Empleado: '"+rsE. getString("APELLIDO")+"'. Vuelta número: "+i ); rsE.next(); } System. out. println("Voy a borrar"); //rsE.deleteRow(); línea comentada para no borrar registros en pruebas y quedarme con 0 empleados... xD //(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'). System. out. println("He borrado."); finally{ System. out. println("llego al finally"); limpiaTabla(); rellenaTabla(); System. out. println("salgo del finally"); } } else JOptionPane. showConfirmDialog(null, "Seleccione un departamento para eliminarlo.", "Error de borrado", JOptionPane. PLAIN_MESSAGE); }
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: 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
Mensajes: 1.674
|
Buenas. for(int i=0; i<fila+1; i++){ System. out. println("Empleado: '"+rsE. getString("APELLIDO")+"'. Vuelta número: "+i ); rsE.next(); } System. out. println("Voy a borrar"); //rsE.deleteRow(); línea comentada para no borrar registros en pruebas y quedarme con 0 empleados... xD //(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'). 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
Mensajes: 217
|
Hola Bulld0z3r, gracias por contestar. rsE se carga con el constructor del JFrame donde estoy trabajando mediante el siguiente método: static void cargaEmpleados(){ try{ int id_dep = rsD.getInt("dept_no"); seleccionaEmple(id_dep); rsE.first(); }catch(Exception e ){System. out. println("Error capturando depto para la tabla --> "+e );} }
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
Mensajes: 1.674
|
Buenas.
La condición del for debería ser i<=fila
Saludos.
|
|
|
En línea
|
- Nice to see you again -
|
|
|
|Miguel|
Desconectado
Mensajes: 217
|
Sigue sin funcionar. En este fragmento: System. out. println("entro en el try"); for(int i=0; i<=fila; i++){ System. out. println("Empleado: '"+rsE. getString("APELLIDO")+"'. Vuelta número: "+i );
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/?xnn2pfkdkxfz15eVersión en .txt: http://www.mediafire.com/?4vtdket2nuer36w
|
|
« Última modificación: 21 Febrero 2012, 17:41 pm por |Miguel| »
|
En línea
|
|
|
|
jperezmonge
Desconectado
Mensajes: 24
Chronos Estudios
|
Asi lo hago yo, a ver si te puede dar un enfoque distinto jButtonEliminarUsuario. addActionListener(new java. awt. event. ActionListener() { public void actionPerformed (java. awt. event. ActionEvent e ) { ModeloJTableUsuario modelo = getModeloJTableUsuario(); int index = getJTableUsuario().getSelectedRow(); // Si se selecciona un elemento en la lista if ( index >= 0 ) { modelo.eliminarUsuario(index); } } });
|
|
« Última modificación: 21 Febrero 2012, 17:58 pm por jperezmonge »
|
En línea
|
|
|
|
|Miguel|
Desconectado
Mensajes: 217
|
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
Mensajes: 24
Chronos Estudios
|
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
Mensajes: 217
|
Gracias, no te preocupes... de todas formas con lo que has dicho estoy pensando otra posibilidad que tal vez funcione... a ver que pasa
|
|
|
En línea
|
|
|
|
jperezmonge
Desconectado
Mensajes: 24
Chronos Estudios
|
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. dbResulSet = dbStatement.executeQuery("SELECT * from disfruta where usuarioDni = '" + dni2 + "'"); //recorremos la consulta while(dbResulSet.next()){ //obtengo el identificador String dni = dbResulSet. getString(1); //obtengo el descripcion int codigo = dbResulSet.getInt(2); try { myData.add(new Disfruta(dni, codigo)); e.printStackTrace(); } }
|
|
« Última modificación: 21 Febrero 2012, 18:15 pm por jperezmonge »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Problemas intentando borrar CD regrabable
Software
|
wvb
|
0
|
2,904
|
1 Diciembre 2005, 17:22 pm
por wvb
|
|
|
Error intentando hookear FindNextFileA
Análisis y Diseño de Malware
|
fary
|
2
|
3,127
|
5 Agosto 2011, 13:13 pm
por fary
|
|
|
Ayuda.Error. Intentando multiplicar dos matrices.
Programación C/C++
|
sofi1
|
2
|
3,268
|
22 Agosto 2011, 04:11 am
por sofi1
|
|
|
error Operation not allowed after ResultSet closed
Java
|
josco
|
0
|
2,975
|
6 Marzo 2012, 01:08 am
por josco
|
|
|
Borrar basura generada por WinXP[RESUELTO]
Windows
|
тαптяα
|
5
|
3,456
|
9 Noviembre 2014, 21:30 pm
por тαптяα
|
|