Truncar campos SQL

26/Oct/2016 Java , , Deja un comentario

Vamos a ver cómo podemos truncar campos SQL cuando estemos haciendo una inserción de datos mediante Java JDBC. Pero pongámonos en situación. La idea es que cuando definas un campo de la base de datos le asignes suficiente tamaño como para que los datos que insertes dentro entren sin problema. Pero la realidad es que hay ciertas situaciones en las que esto no sucede y acabamos realizando modificaciones sobre la estructura de la base de datos.

Una de las situaciones que más quebraderos da es en las cargas masivas, ya que un problema de tamaño nos puede echar atrás, si no tenemos bien montado nuestro programa, toda la carga.

En el caso de que estas cargas se tengan que hacer sí o sí podemos tomar la estrategia de forzar la inserción del campo de texto, independientemente de que sea más grande que el campo, forzando un truncado del campo. Lógicamente deberemos de controlar el warning que genere para tomar las acciones correctoras a posteriori.

Para demostrar cómo gestionar para truncar campos SQL en un programa Java vamos a dar los siguientes pasos.

Crear una tabla de campo pequeño

Creamos una tabla con un campo char que tenga un tamaño de 4 caracteres.

  1. stmt = con.prepareStatement("CREATE TABLE temporal (campo CHAR(4))");
  2. stmt.execute();
  3. stmt.close();

Realizar una inserción con campos grandes

Ahora vamos a insertar campos en esta tabla. Alguno será de 4 caracteres y otros serán de tamaño mayor.

La inserción será la siguiente:

  1. stmt = con.prepareStatement("INSERT INTO temporal VALUES ('Java'), ('Angular'), ('NodeJS'),('Clojure'),('Polymer')");
  2. stmt.execute();
  3. stmt.close();

Consultar qué se ha insertado

Y por último creamos una consulta que devuelva un ResultSet en el cual se muestre que se ha grabado en la tabla.

Algo tan sencillo como:

  1. stmt = con.prepareStatement("SELECT campo FROM temporal");
  2. rs = stmt.executeQuery();
  3.  
  4. while (rs.next())
  5. System.out.println (rs.getString("campo"));
  6.  
  7. stmt.close();

Mostrar el resultado

Si ejecutamos el código tal cual lo hemos escrito nos vamos a encontrar que nuestro programa Java nos devuelve el siguiente error en una SQLException

Data truncation: Data too long for column 'campo' at row 2

Es decir que no tenemos activado el truncado de los campos, y por lo tanto la excepción nos indica que los campos son muy largos.

Configurar la propiedad de truncado JDBC

Para poder truncar campos SQL en Java JDBC lo que tenemos que hacer es configurar la propiedad "jdbcCompliantTruncation" y asignarla un valor de false. Esta configuración se hace en la conexión a la base de datos.

  1. Connection con = null;
  2. String sURL = "jdbc:mysql://localhost:3306/lineadecodigo";
  3.  
  4. p.put("user", "root");
  5. p.put("password","");
  6. p.put("jdbcCompliantTruncation","false");
  7.  
  8. con = DriverManager.getConnection(sURL,p);

Ahora al ejecutar el código fuente veremos que el resultado que obtenemos al recorrer el ResultSet es el siguiente:

Java
Angu
Node
Cloj
Poly

Así hemos visto como podemos truncar campos SQL en nuestro programa Java JDBC.

Vídeos sobre Java


¿Algo que nos quieras comentar?

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

*

*