Solucionado (ver solución)
Solucionado
(ver solución)
1
respuesta

[Duda] Como ejecutar DML en dos tablas relacionados

Como hacer desde java, afectando dentro de las bases de datos relacionados dos tablas relacionadas, es decir, si ejecuto la sentencia DELETE FROM artículos WHERE id = 20; AFECTE LA TABLA articulos eliminado la columna indicada y pueda afectar tambien de la otra tabla con la que esta relaciona es decir desvincule la llave foranea o la relacion.y sin importar que cualquier senencia ejecutada es decir, INSERT, DELETE, UPDATE.

1 respuesta
solución!

¡Hola Julio!

Para ejecutar una sentencia DML en dos tablas relacionadas, debes utilizar una transacción. Una transacción te permite ejecutar varias sentencias DML como un todo, asegurando que todas se ejecuten o ninguna.

Para desvincular la llave foránea o la relación entre dos tablas, debes ejecutar una sentencia UPDATE en la tabla que contiene la llave foránea. Por ejemplo, si tienes dos tablas, "artículos" y "ventas", y la tabla "ventas" tiene una llave foránea que hace referencia a la columna "id" de la tabla "artículos", debes ejecutar una sentencia UPDATE en la tabla "ventas" para eliminar la referencia a la columna "id" de la tabla "artículos".

Aquí te muestro un ejemplo de cómo ejecutar una transacción en Java para eliminar un registro de la tabla "artículos" y desvincular la llave foránea en la tabla "ventas":

Connection conn = null;
PreparedStatement stmt = null;
try {
    conn = DriverManager.getConnection(url, username, password);
    conn.setAutoCommit(false); // Inicia una transacción
    stmt = conn.prepareStatement("DELETE FROM artículos WHERE id = ?");
    stmt.setInt(1, 20);
    stmt.executeUpdate();
    stmt = conn.prepareStatement("UPDATE ventas SET id_artículo = NULL WHERE id_artículo = ?");
    stmt.setInt(1, 20);
    stmt.executeUpdate();
    conn.commit(); // Confirma la transacción
} catch (SQLException e) {
    if (conn != null) {
        try {
            conn.rollback(); // Deshace la transacción si ocurre un error
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }
    e.printStackTrace();
} finally {
    if (stmt != null) {
        stmt.close();
    }
    if (conn != null) {
        conn.close();
    }
}

En este ejemplo, primero se establece una conexión a la base de datos y se inicia una transacción. Luego se ejecuta la sentencia DELETE en la tabla "artículos" y la sentencia UPDATE en la tabla "ventas". Si ocurre algún error, se deshace la transacción. Si todo va bien, se confirma la transacción.

Espero que esta respuesta te haya sido de ayuda. ¡Buenos estudios!