JDBC Batch Update

14/Oct/2016 Java , Deja un comentario

La técnica JDBC Batch Update es una forma de cargar de golpe un conjunto de registros. Simulando lo que sería un funcionamiento batch sobre la base de datos.

Lo primero que haremos, como en todo programa Java que conecte con una base de datos mediante JDBC será el realizar una conexión.

  1. Connection con = null;
  2. String sURL = "jdbc:mysql://localhost:3306/lineadecodigo";
  3. con = DriverManager.getConnection(sURL,"usuario","password");

Si vas a realizar un patrón JDBC Batch Update es recomendable que no te bases en el AutoCommit de la base de datos, por lo cual vamos a deshabilitarlo de la conexión. Nos apoyamos en el método .setAutoCommit()

  1. con.setAutoCommit(false);

Es importante que seas consciente que a partir de este momento el commit o el rollback deberemos de hacerlo por código.

Ahora vamos a preparar una estructura para almacenar las sentencias, esta será un Statement. Las diferentes sentencias de inserción las iremos añadiendo mediante el método .addBatch().

  1. Statement carga = con.createStatement();
  2. carga.addBatch("INSERT INTO Country(country) VALUES ('Spain')");
  3. carga.addBatch("INSERT INTO Country(country) VALUES ('France')");
  4. carga.addBatch("INSERT INTO Country(country) VALUES ('United States')");
  5. carga.addBatch("INSERT INTO Country(country) VALUES ('Brazil')");
  6. carga.addBatch("INSERT INTO Country(country) VALUES ('Japan')");

En este caso hemos utilizado una sentencia con los valores fijos, pero puedes utilizar un PreparedStatement único al cual vayas modificando los valores.

Una vez que tenemos toda la carga preparada simplemente habrá que ejecutarla mediante el método .executeBatch(). Este método devuelve un array de enteros en el que se nos muestra los insert que han ido bien y los que han ido mal.

Ah! Pero no se te olvide que habíamos deshabilitado el AutoCommit de la base de datos. Así que deberemos de ejecutar el método .commit() sobre la conexión.

  1. con.commit();</java>
  2.  
  3. Todo el código deberemos de ejecutarlo dentro de un bucle <code>try-catch</code> que controle una <code><a href="http://www.w3api.com/wiki/Java:SQLException">SQLException</a></code>. Sobre todo, porque si hay algún fallo deberemos de ejecutar un rollback de las inserciones mediante el método <code><a href="http://www.w3api.com/wiki/Java:Connection.rollback()">.rollback()</a></code>
  4.  
  5. <pre lang="java">try {
  6.  
  7. con = DriverManager.getConnection(sURL,"root","");
  8.  
  9. con.setAutoCommit(false);
  10.  
  11. Statement carga = con.createStatement();
  12. carga.addBatch("INSERT INTO Country(country) VALUES ('Spain')");
  13. carga.addBatch("INSERT INTO Country(country) VALUES ('France')");
  14. carga.addBatch("INSERT INTO Country(country) VALUES ('United States')");
  15. carga.addBatch("INSERT INTO Country(country) VALUES ('Brazil')");
  16. carga.addBatch("INSERT INTO Country(country) VALUES ('Japan')");
  17. carga.executeBatch();
  18.  
  19. con.commit();
  20.  
  21. } catch (SQLException sqle) {
  22. System.out.println(sqle.getMessage());
  23. con.rollback();
  24. }

De esta forma habremos ejecutado una carga masiva de datos, ideal para las cargas iniciales de la base de datos, mediante un JDBC Batch Update.

Vídeos sobre Java


Difunde el Conocimiento

Si te ha gustado el artículo o te ha sido de utilidad, no dejes de compartirlo con tus amigos en las redes sociales... Te estaremos muy agradecidos. :-D

¿Algo que nos quieras comentar?

Déjanos tu comentario, no te preocupes que tu email no será publicado

*

*