Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > hacer un update ala ultima fila de una consulta

Saludos colegas!!

Tengo una tabla en mysqlser

tabla USUARIO con parametros columaA, columnaB, columnaC

ColumnaA contiene DNI la cual registra los dni insertados, por decirlo haci las 5 primeras filas esta almacena solo un unico dni, la columna B registra hora ingreso, la columnaC registra Hora salida, la cual al hacer un update ala fila 5 ala columna hora salida me actualiza columna entera la cual no quiero solo quiero queme actualice la ultima fila del dicho dni el where lo hago por Dni

noviembre 24, 2016 | Registered Commenterunknown

Hola, pero la ultima fila dependerá de como hagas la consulta, no siempre será la misma, ya que no es lo mismo decir:


select * from usuario order by columnaA

Que hacer:


select * from usuario order by columnaB

Por lo tanto, la ultima fila, no siempre será la misma.

Dicho esto, si lo que quieres es modificar la ultima fila, se me ocurre que puedes crear la consulta que sea, y en el ResultSet ve a la ultima fila(método last() del resultset). Y nada, una vez en la ultima fila, te almacenas el dni de esa fila y ya te generas tu sentencia update:


update usuario set columnaA=NuevoValorA, columnaB=NuevoValorB,columnaC=NuevoValorC where columnaX=ValorX;

Siendo valorX el dato extraído de la ultima fila del resultset.

Bueno, a ver si es algo así o lo que necesitas, o si no, se mas especifico. Venga, Un saludo.

noviembre 24, 2016 | Registered Commenterloderain

Bueno lo que pretendo hacer un control de asistencia del personal en java

mi lógica es esta tal como se muestra en al imagen de la tabla!!!

http://s1337.photobucket.com/user/washington8277/media/tabla_zpsfj3wbnl6.png.html

noviembre 24, 2016 | Unregistered Commenterunknown

Hola de nuevo, entonces debes jugar con el "idregistrohoras", ya que es la clave primaria de esa tabla(o eso supongo) y es la que identifica cada fila, ahora, para obtener el ultimo y modificarlo, primero debes seleccionar el ultimo "idregistrohoras" de ese usuario. Para ello, bastaría con hacer una select tipo:


select max(idregistrohoras) from usuario where dni ='ElQueSea';

Con esa select obtendrás el ultimo idregistrohoras de un usuario.
Posteriormente simplemente haces el update usando ese idregistrohoras como condición, algo así:


update usuarios set ColumnaA=valorA,...,ColumnaX=valorX where idregistrohoras= El_Obtenido_En_La_Select_Anterior;

De esa manera, estarás actualizando solo el ultimo registro de ese usuario. Ahora, si unimos ambas sentencias quedaría algo como:


update usuarios set ColumnaA=valorA,...,ColumnaX=valorX where idregistrohoras= (select max(idregistrohoras) from usuario where dni ='ElQueSea');

De esa forma, solo teniendo el dni del usuario que quieres modificar, en una sola sentencia, modificaras los últimos datos de un usuario.

Échale un ojo y ya nos cuentas. Un saludo

noviembre 24, 2016 | Registered Commenterloderain

Agradezco su tiempo !!

estoy ejecutando la consulta desde netbeans ,

Sttring sql="update registrohoras set Hsalidar=' "+horaactual+" ' where idregistrohoras= (select max(idregistrohoras) from registrohoras where Dni =' "+txtcode.getText()+" ')";


me arroja esta excepción.

java.sql.SQLException: You can't specity target table'resgistrohoras' for update in FROM clause


alguna sugerencia al respecto

muchas gracias x su tiempo !!

noviembre 25, 2016 | Unregistered Commenterunknown

Hola,según leo por ahí, mysql no permite ese tipo de sentencias update(Fallo mio, por querer hacerlo todo de una vez), no me explico la razón(Otros RDBMS si lo permiten). Según leo por ahí una forma valida de hacer un update con una subconsulta sobre la misma tabla, quedaría algo así:


Sttring sql="update registrohoras set Hsalidar=' "+horaactual+" ' where idregistrohoras=
( SELECT max(cid) FROM ( SELECT idregistrohoras AS cid FROM registrohoras where dni='"+txtcode.getText()+"') AS c)";

Prueba con esa sentencia, a ver si esa te funciona, sin poder hacer pruebas, no puedo hacer mucho mas.

Otra opción es como te venia diciendo desde el principio, hacer la operación en 2 partes:

primero haces


select max(id) from registrohoras where dni = '"+txtcode.getText()+"'";

Ejecutas esa consulta y guardas ese id obtenido en alguna variable(llamemosla, idActualizar)

y posteriormente, una vez que tienes el idregistrohoras de la fila que quieres modificar, haces el update así, haciendo uso del id obtenido anteriormente:


"update registrohoras set Hsalidar=' "+horaactual+" ' where idregistrohoras=" + idActualizar

La primera forma, no estoy seguro que vaya a funcionar. La segunda(hacerlo en 2 sentencias) funciona seguro. Prueba y ya nos cuentas. Venga un saludo.

noviembre 25, 2016 | Registered Commenterloderain

Agradezco su respuesta amigo

La primera nome funciona, quisiera saber como es que puedo ejecutar las dos sentencias aun soy novato .

de antemano gracias por su tiempo !!

noviembre 25, 2016 | Unregistered Commenterunknown