entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Actualizar tabla automaticamente

Buenas, estoy realizando en java una app muy sencilla, realizar una consulta en mysql y mostrar los datos en un jTable, lo que no consigo hacer es que me muestre automáticamente si hay un nuevo registro, así no tengo que estar cada x tiempo pulsando el botón "mostrar". Lo he intentado con un Thread, bucles..pero nada...

Gracias y saludos

1 Respuesta

3votos

MitsuGami Puntos8010

No creo sea eficiente lo que quieres hacer. Para realizar eso deberás de hacer:

  1. Una clase o un método en tu DAO, por ejemplo hayNuevosRegistros que traiga en una consulta el total de registros: SELECT COUNT(*) FROM tabla. En la clase, deberás de tener una variable llamada totalRegistros que almacene el total de registros.

  2. En un thread debes usar esa DAO para hacer esa consulta todo el tiempo (1). Cuando la consulta traiga un número de registros más elevados que el número que tiene la variable totalRegistros se actualiza la variable con el número de registros actuales, acto seguido se hace una consulta para obtener los últimos registros.

Ejemplo

Supongamos que la variable totalRegistros tiene un valor de 500. En el thread se itera durante indefinidamente consultando el N° de registros y al cabo de una hora (2) se detecta que hay nuevos registros, en concreto, 510.

Se actualiza la variable totalRegistros que ahora vale 510 pero también se crea una variable temporal que guarde la cantidad de registros antiguos, esto para determinar cuántos registros nuevos hay. Acto seguido, se traen los nuevos registros con ayuda del DAO: SELECT FROM tabla ORDER BY id DESC LIMIT (totalRegistros - tempTotalRegistros). Esto traerá solo los últimos registros ahorrándote tiempo y CPU en una consulta gigante.

Todo lo anterior, dentro del thread. Aún dentro del thread, se usa alguna referencia a la vista o al controlador de la vista para pasarle la lista o array de nuevos registros. La vista, itera los registros (envueltos en alguna clase de modelo para mayor flexibilidad) y los agrega a la tabla.

Después de esta un poco extensa lectura, fíjate en los puntos 1 y 2. En el punto 1 se itera indefinidamente, lo cual consume recursos del sistem y más y más mientras la cantidad de registros aumente. El punto 2 dice que al cabo de una hora se detectan nuevos registros. Has desperdiciado memoria y CPU durante una hora. Eso es poco eficiente.

Opciones

  • Realizar la comprobación de nuevos registros en intervalos medianos de tiempo (15 minutos por ejemplo).
  • Poner un botón en la vista llamado Actualizar para que el usuario lo pinche cada vez que quiera comprobar si hay nuevos registros.

1voto

Xuelo comentado

uuf es mas complicado de lo que parece, me decanto por poner un boton actualizar y que el cliente le vaya dando cuando necesite mirar....

Gracias por la ayuda

1voto

bl4z3r comentado

@migamipe Te corrijo en 2 cosas. La primera es que no se verifica la cantidad de registros si no que registro se guardo, se modifico y borro de la base. Lo digo por que si hay una actualización de una fila, este cambio no impactara en el monitor, ya que solo cuenta la cantidad de filas que tienes.

Una mejor opción es ponerle a las tablas, las famosas columnas de auditoria: de cuando se creo, cuando se modifico y por quienes. De esta manera es mas fácil de hacer seguimiento de cada registro.

1voto

MitsuGami comentado

@bl4z3r El OP dijo que quería obtener automáticamente los nuevos registros agregados, no que quería hacer un monitoreo del estado de los registros.

Respecto a lo que dices, siempre debe ponerse la fecha de actualización por cuestiones de seguridad.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta