Múltiples datasources en JasperReports

9
32355

Múltiples datasources en JasperReports

Índice de contenidos.

1. Introducción

Seguro que a alguno os ha surgido alguna vez la necesidad de utilizar en el mismo informe información procedende de varios datasources, bien porque el informe se
componga de datos alojados en bases de datos distintas, o de fuentes de datos completamente diferentes como podría ser una base de datos y un fichero XML.
Este tutorial surge como respuesta a una cuestión que nos plantearon los alumnos en nuestros cursos ya que necesitaban sacar datos en el mismo informe que provenían de bases de datos distintas.

JasperReports nos pone una limitación y es que un informe únicamente puede trabajar con un datasource y tener una única consulta para recoger los datos
a pintar. Si queremos sacar datos de más de una fuente debemos crear subinformes y pasarle al informe principal, a través del mapa de parámetros, los distintos datasources.

El ejemplo lo haremos sobre dos bases de datos, PostgreSQL y MySQL. En la primera sacaremos un listado de provincias y en la segunda un listado de usuarios.

2. Entorno.

El tutorial está escrito usando el siguiente entorno:

  • Hardware: Portátil Asus G50Vseries (Core Duo P8600 2.4GHz, 4GB RAM, 320 GB HD).
  • Sistema operativo: Windows 7
  • JasperReports 3.7.2

3. Informes

Lo primero será crear nuestros informes con IReport. Decimos informes ya que será necesario crear dos informes, cada uno con una consulta SQL a cada base de datos. El informe
principal, el que recibirá la conexión de PostgreSQL, incluirá el segundo como subinforme. El segundo informe recibirá la conexión a MySQL a través de un parámetro. Lo vemos en detalle a continuación:

3.1 Informe Principal

Como decíamos este informe recibirá la conexión de PostgreSQL de la forma habitual a como se hace en cualquier informe, es decir a través del método fillReport, ver código más adelante.

En el informe creamos el parámetro SUBREPORT_CONNECTION de tipo java.sql.Connection. En este parámetro irá la conexión a la base de datos MySQL necesaria para el subinforme.

La consulta de este informe es muy sencilla, simplemente un select * from provincias de donde sacamos el campo nombre que pintamos en una lista.

3.2 Subinforme

Creamos un nuevo informe donde definimos la consulta SQL que saca la lista de usuarios de una tabla de la base de datos MySQL. Este subinforme debe recibir a través
de un parámetro la conexión.

Ya sólo nos queda incluir el subinforme en el informe principal. La forma de hacerlo es añadiendo un subreport y desde el asistente escogemos el subinforme creado anteriormente.

El siguiente paso será añadirle una conexión al subinforme. Para ello le pasamos el parámetro creado anteriormente en el que irá la conexión a la base de datos MySQL

4. Pruebas

Para probar el ejemplo creamos un test

El resultado del test es el informe en pdf con la lista de provincias y usuarios sacadas de 2 bases de datos diferentes.

5. Conclusiones

El ejemplo es sencillo pero se ve la forma de poder conectarnos a diferentes bases de datos, eso sí con la limitación de tener que utilizar un informe por cada consulta. Esto
no es problema ya que podemos incluir tantos subinformes como queramos obteniendo finalmente el resultado que esperábamos.

Un saludo. Juan.

9 Comentarios

  1. Hola he seguidoel tutorial pero cuando llego a la parte de el parámetro SUBREPORT_CONNECTION de tipo java.sql.Connection no encuentro este tipo en la propiedee parameter class.
    que hago ??, ya que no me sale.
    saludos

  2. Compañero
    Buena tarde,

    Disculpa la molestia, fíjate que tengo un problemita… me han solicitado hacer unos reportes tipo contratos (ventas). Los datos como nombres, apellidos, dirección, cantidades, productos a adquirir, sean recogidos vía web. Y tienen que ser dinámicos y flexibles tanto como sea posible… dependiendo cuantos productos o que tipo, así será las partes que el reporte deba incluir (secciones de licencias, precios, clausulas, etc.), yo he estado trabajando ya por varios meses iReports pero nunca he podido hacer esto. (colocar dos o tres páginas con formatos diferentes)

    He buscado tutoriales o ayuda por internet para hacer esto, pero no he tenido éxito. Será que tu amable persona tendrá una idea o solución a mi problema para implementarla?.

    De antemano muchas gracias por el tiempo prestado y tu pronta respuesta.

  3. Hola,
    Tengo un problema al generar com Jasper un informe con salida en rtf. Cada uno de los campos sale encapsulado, es decir, el texto metido dentro de una caja. Cuando abro el informe con un word, por ejemplo, es muy dificil editar diversos campos al mismo tiempo porque cada uno tiene su caja.
    Gracias por tu tiempo.

  4. Primeramente Sludarte y ala vez hacerte una consulta hacer el de generar reportes con jasperreport y ireport netbeans java específicamente,
    estoy haciendo todos los reportes sale magníficamente, el problema surge cuando le mando las impresiones a una impresora matricial sale todo distorsionado, el diseñador ireport 4.1.1 no aparecen las fuentes para impresoras matriciales, no se si algún componente, plugin adicional, algo mas que hacer agradecería bastante su ayuda, de antemano agradecerles por tu respuesta..

  5. Buenos días, el manual esta genial y últimamente me intriga a una cosa, sería posible poder apilar varios reportes en uno solo. Me explico, tengo varios jasper pero me gustaría obtenerlos en una sola llamada todos en un solo pdf.
    Luego también tengo otro problema, y es que con lo que estoy trabajando necesito llenar un jasper con una imagen que obtengo por código, dispongo de ese archivo en png (ya generado) o bien en objeto (en código). Como podría pasárselo a un reporte nuevo y que muestre las imágenes ??
    Gracias por tu ayuda.

  6. necesito ayuda… como hago un reporte con subreporte donde el reporte y subreporte reciben el mismo parametro pero el subreporte me muestra una consulta distinta y el reporte ora diferente… pero usando el mismo parametro??? como le hago???
    EJEMPLO
    el parametro que se recibe es 100
    y el reporte me muestra una consulta apartir de ese parametro y mi subreporte otra diferente pero usa el mismo parametro

  7. necesito ayuda… como hago un reporte con subreporte donde el reporte y subreporte reciben el mismo parametro pero el subreporte me muestra una consulta distinta y el reporte otra diferente… pero usando el mismo parametro??? como le hago???
    EJEMPLO
    el parametro que se recibe es 100
    y el reporte me muestra una consulta apartir de ese parametro y mi subreporte otra consulta diferente pero usa el mismo parametro

  8. Tengo un reporte generado con JavaBean DataSource, dentro de este como parámetros tengo una lista de otro Bean de mi aplicación, el problema es que no he podido hacer que el listado que tengo del otro Bean se muestre, los demás parámetros todos los pinto, pero el del listado me presenta inconvenientes.
    Alguien sabe como?
    Mi correo es sigi0302@gmail.com

Dejar respuesta

Please enter your comment!
Please enter your name here