Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Crear un excel de 15000 líneas con POI

Estas en el tema de Crear un excel de 15000 líneas con POI en el foro de Java en Foros del Web. Buenos días Tengo una función Java que me vuelca el contenido de un Resultset en un fichero Excel. El problema es que en recorrer el ...
  #1 (permalink)  
Antiguo 08/10/2012, 02:18
 
Fecha de Ingreso: octubre-2012
Mensajes: 8
Antigüedad: 11 años, 6 meses
Puntos: 0
Exclamación Crear un excel de 15000 líneas con POI

Buenos días

Tengo una función Java que me vuelca el contenido de un Resultset en un fichero Excel. El problema es que en recorrer el Resultset para hacer el volcado me tarda más de 15 minutos. Conocéis alguna forma de hacer un volcado directo del resultset al excel sin necesidad de recorrerlo?

Os pego el código en el que recorro el resultset


Código:
String sentencia = "select mes,anno,.... (18 campos) from tabla";
st = con.prepareStatement(sentencia);
rs = st.executeQuery();
while (rs.next()) {
contador++;

// hash = new Hashtable();
// se crea una fila por cada fila recuperada de la BBDD
HSSFRow fila = hoja1.createRow((short) contador);
HSSFCell celda = null;
celda = fila.createCell(0, HSSFCell.CELL_TYPE_STRING);
celda.setCellStyle(estiloCelda);
celda.setCellValue(mes);

//Este proceso lo repito para cada una de las 18 columnas que tiene el excel


}
libro.write(fichero);
response.setContentType("application/excel");
response.setContentLength(fichero.size());
String nombre = bean.getHospital()+"-CuadroFacturacion"+mes+anio;
response.setHeader("Content-disposition","attachment; filename="+nombre+".xls");
ServletOutputStream out = response.getOutputStream();
fichero.writeTo(out);
out.flush();
}

He estado probando y la consulta me tarda en ejecutar: 11349680465179 milisegundos... por tanto entiendo que no es demasiado ya que devuelve 20.082 registros.

El punto en el que se queda pillado es en el recorrido del ResultSet para ir incluyendo cada dato al excel por filas

Muchísimas gracias por vuestra ayuda estoy bloqueada!!

Un saludo
  #2 (permalink)  
Antiguo 09/10/2012, 01:44
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 7 meses
Puntos: 188
Respuesta: Crear un excel de 15000 líneas con POI

Perdona pero 11349680465179 milisegundos son cerca de 189161341 minutos, con lo cual ya tienes una idea de por qué se te cuelga :D

Para explicarte como va esto, el resultSet actúa dinámicamente, es decir, que le va pidiendo resultados a la BD a medida que se va iterando, por eso se inicia tan rápidamente pero no se recorre igual de rápido. Eso se hace para evitar ocupar la pila de datos de java.

Si se te cuelga tienes que saber por qué es, igual porque está ocupando demasiada memoria ram y necesita más para operar.

Una opcion que tienes es dividir ese problema en varios mas pequeños e irlos resolviendo cada cierto tiempo, es decir, creas primero el libro excel, luego haces la query, recuperas los 100 primeros registros y los introduces en el excel, luego los 100 siguientes, etc.

Mucho por donde tirar no hay... así que toca ingeniárselas.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #3 (permalink)  
Antiguo 10/10/2012, 07:34
 
Fecha de Ingreso: febrero-2011
Mensajes: 672
Antigüedad: 13 años, 2 meses
Puntos: 78
Respuesta: Crear un excel de 15000 líneas con POI

Yo probaria de meter los resultados en un arraylist y cuando los tengas todos, crear el Excel. Es una idea.

Etiquetas: excel, poi, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:51.