Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
2
respuestas

[Sugerencia] Como resolver que la tabla en la B.D. MySQL guarde los cambios.

Tuve la misma situación que muchos de nosotros, resultaba que las MODIFICACIONES que realizaba, solo se logran realizar si al realizar el la corrección, click fuera de la fila y luego click en modificar, pero creo que ese no es el caso.

Pues resulta que investigando un poco me di cuenta que se podría tratar de algo no previsto en la forma en que la interfaz interactúa con la tabla en MySQL y cómo maneja los eventos.

Al continuar con la búsqueda de esta situación y la vez haciendo uso de I.A., esta me sugiere que "...Este comportamiento es que el evento de edición de celda en la tabla podría no estar disparándose de inmediato al realizar una modificación. En muchos entornos gráficos, los cambios en una celda no se reflejarán en el modelo de datos subyacentes hasta que la edición de la celda se complete o se salga de la celda editada.

Cuando se hace clic fuera de la celda editada, es posible que se desencadene el evento de finalización de edición, lo que actualiza el modelo de datos de la tabla con el nuevo valor editado. Luego, cuando presiones el botón de modificar, estás leyendo los datos actualizados del modelo y realizando la modificación en la base de datos..."

Aunado a lo anterior, me realizo una sugerencia, la cual te comparto:

"...Para mejorar esta experiencia y evitar la necesidad de hacer clic fuera de la fila modificada antes de presionar el botón de modificar, puede intentar forzar la finalización de la edición de la celda cuando se presione el botón de modificar. Limpie esto llamando al método table.getCellEditor().stopCellEditing()antes de realizar la modificación en la base de datos. Esto asegurará que cualquier cambio en la celda se aplique antes de que se realice la modificación en la base de datos..."

**Aquí hay un ejemplo de cómo yo implemente mis métodos Modificar en ambas clases del proyecto, cabe destacar que busque muchas soluciones a la situación de lograr que los cambios se guardaran y no tenia resultado, hasta que ingrese al foro y vi que esta particularidad de la interfaz era en si el problema y no la forma en la que nosotros estábamos tratando de implementar nuestros métodos: **

Código:

public int modificar(String nombre, String descripcion, Integer cantidad, Integer id) throws SQLException {
    // Establecer una conexión a la base de datos
    ConnectionFactory factory = new ConnectionFactory();
    Connection con = factory.recuperaConexion();
    
    try {
        // Crear la consulta SQL parametrizada para actualizar un producto
        String query = "UPDATE PRODUCTO SET NOMBRE = ?, DESCRIPCION = ?, CANTIDAD = ? WHERE ID = ?";
        PreparedStatement preparedStatement = con.prepareStatement(query);
        preparedStatement.setString(1, nombre);        // Establecer el valor del parámetro 'NOMBRE'
        preparedStatement.setString(2, descripcion);   // Establecer el valor del parámetro 'DESCRIPCION'
        preparedStatement.setInt(3, cantidad);         // Establecer el valor del parámetro 'CANTIDAD'
        preparedStatement.setInt(4, id);               // Establecer el valor del parámetro 'ID'

        // Ejecutar la consulta y obtener el número de filas afectadas
        int updateCount = preparedStatement.executeUpdate();

        // Devolver el número de filas modificadas
        return updateCount;
    } finally {
        // Cerrar la conexión a la base de datos
        con.close();
    }
}

SIGIENTE METODO EN OTRA RESPUESTA, NO ME ALCANZARON LOS CARACTERES PERMITIDOS...

2 respuestas

SIGUIENTE CLASE:

private void modificar() {
    // Comprobar si hay una fila seleccionada en la tabla
    if (tieneFilaElegida()) {
        JOptionPane.showMessageDialog(this, "Por favor, elije un item");
        return;
    }

    // Detener la edición de celda si está en progreso
    if (tabla.isEditing()) {
        tabla.getCellEditor().stopCellEditing();
    }

    // Obtener los valores de las celdas seleccionadas
    Optional.ofNullable(modelo.getValueAt(tabla.getSelectedRow(), tabla.getSelectedColumn()))
            .ifPresentOrElse(fila -> {
                // Obtener valores específicos de la fila
                Integer id = Integer.valueOf(modelo.getValueAt(tabla.getSelectedRow(), 0).toString());
                String nombre = (String) modelo.getValueAt(tabla.getSelectedRow(), 1);
                String descripcion = (String) modelo.getValueAt(tabla.getSelectedRow(), 2);
                Integer cantidad = Integer.valueOf(modelo.getValueAt(tabla.getSelectedRow(), 3).toString());

                int filasModificadas;

                try {
                    // Llamar al método 'modificar' en 'productoController'
                    filasModificadas = this.productoController.modificar(nombre, descripcion, cantidad, id);
                    if (filasModificadas > 0) {
                        JOptionPane.showMessageDialog(this, "Producto actualizado correctamente");
                    } else {
                        JOptionPane.showMessageDialog(this, "No se pudo actualizar el producto");
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                    JOptionPane.showMessageDialog(this, "Error al modificar el producto: " + e.getMessage());
                }
            }, () -> JOptionPane.showMessageDialog(this, "Por favor, elije un item"));
}

Saludos para todos.

Hola Alumno, espero que estés bien.

Felicitaciones por tu aprendizaje, me alegra que estés disfrutando del curso y gracias por compartir con nosotros.

Mucho éxito en todo lo que te propongas y continúa con ese empeño.

Recuerda que si tienes alguna duda sobre el contenido, estaremos aquí para ayudarte. ¡Vamos juntos!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios