es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Una forma de actualizar múltiples registros juntos.

Estoy tratando de ver si hay alguna manera de mejorar la forma en que se inserta y actualiza los datos.

Estoy utilizando ORACLE DB con JDBC.

La forma actual en la que lo estoy haciendo es actualizar (por ejemplo) el registro del cliente utilizando un bucle FOR después de verificar si toUpdate es true. Un ejemplo como el código de muestra a continuación, seguido de llamar a un DAO existente update() para hacerlo. Pero esto no permitiría la operación de actualización e inserción de múltiples datos juntos.

Sin embargo, ¿hay una mejor manera de actualizar e insertar múltiples datos juntos?

if (toUpdate) {
    for (Customer customerRec : customerRecList) 
        customerRecDAO.update(customerRec);
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, existe una forma mejor de UPSERT múltiples datos juntos. Un enfoque es utilizar la operación Spring JDBC BatchUpdate. Esta operación permite la ejecución de un lote de instrucciones SQL en una base de datos que admite operaciones de lotes.

    Para utilizar la operación BatchUpdate, puedes modificar el código existente para crear una lista de instrucciones de actualización SQL para los registros que se necesitan actualizar. Una vez que tengas la lista, puedes utilizar la operación BatchUpdate para ejecutarlas todas de una vez. Esto reduce el número de viajes de ida y vuelta a la base de datos, mejorando el rendimiento de la aplicación.

    Aquí tienes un ejemplo de código para comenzar:

        List<object[]> batchArgs = new ArrayList<>();
        for (Customer customerRec : customerRecList) {
            if (toUpdate) {
                String sql = "UPDATE customer SET name = ?, address = ? WHERE id = ?";
                Object[] args = {customerRec.getName(), customerRec.getAddress(), customerRec.getId()};
                batchArgs.add(args);
            } else {
                String sql = "INSERT INTO customer (name, address, id) VALUES (?, ?, ?)";
                Object[] args = {customerRec.getName(), customerRec.getAddress(), customerRec.getId()};
                batchArgs.add(args);
            }
        }
        jdbcTemplate.batchUpdate(sql, batchArgs);
    

    La lista batchArgs contiene arrays de parámetros para las instrucciones SQL de actualización o inserción. El objeto jdbcTemplate es una instancia de JdbcTemplate que proporciona métodos para ejecutar instrucciones SQL.

    En este ejemplo, la variable sql contiene la instrucción SQL que se va a ejecutar, dependiendo de si el registro necesita ser actualizado o insertado. El array args contiene los parámetros para la instrucción.

    Finalmente, el método jdbcTemplate.batchUpdate(sql, batchArgs) ejecuta el lote de instrucciones SQL de una vez.

    Espero que esto te ayude a mejorar la forma en que se insertan y actualizan los datos en tu aplicación.</object[]>

Comments are closed.