Ir al contenido principal

Statement (addBatch, executeBatch, clearBatch): Ejecutar insert, update por lotes

Ejecutar sentencias por lotes.

Nos basaremos para el ejemplo en tres métodos de Statement:

  • addBatch(String sentencia). Añade una sentencia a la lista de sentencias por lotes.
  • executeBatch(). Ejecuta la lista de sentencias por lotes. Retorna un array de enteros con el resultado de cada sentencia.
  • clearBatch(). Limpia la lista de sentencias por lotes.
Si tenemos la intención de realizar varias sentencias INSERT o UPDATE consecutivas, es mucho más eficiente utilizar la ejecución de sentencias por lotes que enviar las sentencias una por una.

Creamos un método que reciba una lista de sentencias y las ejecuta por lotes:

public int[] ejecutaPorLotes(List sentencias) {
        Connection conn = getConnection();
        int[] resultado = null;
        Statement st = null;
        try {
            st = conn.createStatement();
            for (int i = 0; i < sentencias.size(); i++) {
                String sentencia = (String) sentencias.get(i);
                st.addBatch(sentencia);
            }
            resultado = st.executeBatch();
            st.clearBatch();
            return resultado;
        } catch (SQLException e) {
            e.printStackTrace();
            return resultado;
        } finally {
            if (st != null) {
                try {
                    st.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }        

        }

    }

Vamos a probar el código:

public static void main(String[] args) {
        
        CaracteristicasJDBC car = new CaracteristicasJDBC();
        
        ArrayList lista = new ArrayList();
        lista.add("INSERT INTO USUARIOS VALUES ('Pepe',19)");
        lista.add("INSERT INTO USUARIOS VALUES ('Juan',21)");
        
        int[] resultado = car.ejecutaPorLotes(lista);
        
        for(int i=0;i
            System.out.println("resultado: "+resultado[i]);
        }

    }

Ejecutamos y vemos la consola:

Resultado

Comprobamos los datos en la tabla:

datos

Comentarios

  1. Hola.

    Yo no se si lo estoy haciendo bien, pero hago lo mismo, y funcionar funciona, pero tengo la sensación de que se está introduciendo en la bbdd un solo campo a la vez ... luego es muuuuy lento

    Este es mi código:

    public void insertarDatos (ArrayList lista){

    Connection connection = null;
    PreparedStatement statement = null;
    try {
    connection = getCx();
    statement = connection.prepareStatement("INSERT INTO logs (ip,time,request,referer,httpcode) VALUES (?,?,?,?,?)");
    for (int i = 0; i < lista.size(); i++) {
    BeanLog bl = (BeanLog)lista.get(i);
    statement.setString(1, bl.getIp());
    statement.setString(2, bl.getTime());
    statement.setString(3, bl.getRequest());
    statement.setString(4, bl.getReferer());
    statement.setInt(5, bl.getHttpcode());
    statement.addBatch();
    if ((i + 1) % 1000 == 0) {
    statement.executeBatch(); // Ejecuto cada 1000 items.
    }
    }

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Primer CodeLab de Web Services con Mule ESB, JAX WS, SOAP, WSDL, Spring

Primer CodeLab de Web Services usando [ Mule ESB , JAX WS , SOAP , WSDL , Spring ]. en este post no hablaré nada teórico sobre Mule , ya que ello lo pueden encontrar Googleando, será un lab totalmente práctico. Requisitos: - JDK  1.6 - MuleStudio - soapUI Paso a Paso para crear Web Services con Mule : 1. Crear proyecto Mule ( MuleStudio ):  Next > Next > Next > Finish 2.- Crear el Objeto Producto.java package com.dmotta.mule.labuno.mulelabuno.bo; import java.io.Serializable; public class Producto implements Serializable { private String id; private String nombre; private String marca; private String descripcion; public Producto() { } public Producto(String id, String nombre, String marca, String descripcion) { this.id=id; this.nombre=nombre; this.marca=marca; this.descripcion=descripcion; } //getters/setters } 3.- Crear la Interface que publicará los métodos listarProductos() y getDetalleProdu...

RESTful Webservices con Java (Jersey / JAX-RS) - Tutorial Uno

REST con Java (JAX-RS) usando Jersey Este articulo explica como desarrollar RESTful web services en Java con JAX-RS implementacion de Jersey. En este ejemplo se usara SpringSource Tools Suite(Eclipse Helios), Java 1.6, SpringSource TC Server and JAX-RS 1.1. (Jersey 1.4). 1. REST - Representational State Transfer 1.1 Informacion General: En una Arquitectura REST tipicamente se tiene un REST server , el cual provee acceso a los Clientes REST  que acceden a consultar, modificar un Recurso REST . REST permite que los recursos sean presentados en diferentes tipos de datos, "text, html, xml, JSON" .  El Cliente REST  puede generar una peticion de un tipo de dato via el protocolo HTTP. 1.2. HTTP metodos Los metodos estandar HTTP usados en en REST son  PUT, GET, POST, DELETE. 1.3. RESTFul webservices Un RESTFul webservices es basados en metodos HTTP y en el concepto REST.  Por lo general se define URI base para los servicios, los MIME-types sus...