Foro sobre Java SE > hacer un update ala ultima fila de una consulta
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.
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
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
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 !!
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.
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 !!
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