Sie sind auf Seite 1von 19

Gua para la creacin de Reportes con JasperRepots y iReports : Reportes con

Conexin a Base de Datos


Lo primero que haremos es bajar el JasperReports y iReport.
La ltima versin de iReport est basada en la plataforma de NetBeans por lo que las interfaces de
ambos son muy parecidas.


La base de datos que usar se llama "pruebaReportes" y esta hecha en Postgresql, contiene la tabla
"participantes". Este es el script para la creacin de esta tabla:

CREATE TABLE participantes
(
"ID" integer NOT NULL,
"NOMBRE" character varying,
"USERNAME" character varying,
"PASSWORD" character varying,
"COMENTARIOS" character varying,
CONSTRAINT "PK_PARTICIPANTES" PRIMARY KEY ("ID")
)
WITH (
OIDS=FALSE
);

Y este es el script para poblar la tabla anterior:

insert into participantes("ID","NOMBRE","USERNAME","PASSWORD","COMENTARIOS")
values (2,'Participante 2','par2user','part2pass','comentarios participante
2');
insert into participantes("ID","NOMBRE","USERNAME","PASSWORD","COMENTARIOS")
values (3,'Participante 3','par3user','part3pass','comentarios participante
3');
insert into participantes("ID","NOMBRE","USERNAME","PASSWORD","COMENTARIOS")
values (4,'Participante 4','par4user','part4pass','comentarios respecto al
participante 4');
insert into participantes("ID","NOMBRE","USERNAME","PASSWORD","COMENTARIOS")
values (5,'Participante 5','par5user','part5pass','sin comentarios para el
participante 5');
insert into participantes("ID","NOMBRE","USERNAME","PASSWORD","COMENTARIOS")
values (6,'Participante 6','par6user','part6pass',NULL);
insert into participantes("ID","NOMBRE","USERNAME","PASSWORD","COMENTARIOS")
values (7,'Participante 7','par7user','part7pass','comentatios participante
7');
insert into participantes("ID","NOMBRE","USERNAME","PASSWORD","COMENTARIOS")
values (8,'Participante 8','par8user','part8pass','comentarios participante
8');
insert into participantes("ID","NOMBRE","USERNAME","PASSWORD","COMENTARIOS")
values (9,'Participante 9','par9user','part9pass','comentarios participante
9');
insert into participantes("ID","NOMBRE","USERNAME","PASSWORD","COMENTARIOS")
values (10,'Participante 10','par10user','part10pass',NULL);

Ahora que tenemos nuestros datos crearemos un "datasource" en iReport para poder acceder a
nuestros datos y hacer pruebas directamente, sin necesidad de una aplicacin Java (por el
momento). Para crear este datasource hacemos clic en el cono "Report Datasources" ubicado en
la barra de herramientas de iReport:



Con lo que se abrir la ventana de "Connections / Datasources" que en este momento debe contener
solo un "Empty datasource" y la conexin a una base de datos de prueba en HSQLDB. Ahora
hacemos clic en el botn "New" para crear nuestro nuevo datasource.



En la nueva ventana que se abre seleccionamos "Database JDBC connection" y presionamos el
botn "Next". En la siguiente ventana debemos proporcionar algunos datos como el nombre se le
dar al datasource y los datos para realizar la conexin de la base de datos. Despus de llenar estos
datos su ventana debe haber quedado ms o menos como la siguiente (recuerde usar el "JDBC
Driver" que corresponda al manejador de base de datos que estn usando:



Antes de guardar esta configuracin hagan clic en el botn "Test" para probar que todos los datos
proporcionados son correctos. Si todo ha salido bien, al hacer clic en el botn "Save" la ventana
actual debe cerrarse y nuestro datasource debe estar ahora en la ventana "Connections /
Datasources".



Ahora pasaremos a crear nuestro nuevo reporte. Esta ser la primer y nica ocasin en la que
haremos uso del "Report Wizard" para ayudarnos a generar el reporte. Para esto vamos al men
"File -> New...". Con esto se abrir la ventana de "New File" en la que seleccionaremos el formato
de nuestro reporte. En mi caso seleccionar la plantilla "Wood" aunque pueden seleccionar la que
ustedes deseen, y hacemos clic en el botn "Launch Report Wizard"



Este wizard nos ayudar a crear un reporte 100% funcional en 6 pasos (en realidad 5 ya que
empezamos directamente en el paso 2) que podremos ver desde el mismo iReport sin necesidad de
escribir una solo lnea de cdigo Java. Estos 7 pasos son:
1. Seleccin de la ubicacin en la que se guardar nuestro reporte.
2. Seleccin del datasource e introduccin del query para obtener los datos que nos interesan.
3. Seleccin de los datos que queremos mostrar en el reporte.
4. Creacin de grupos para el reporte (se explicar en un post posterior).
5. Seleccin del layout o acomodo de los datos en el reporte
6. Felicitacin por terminar nuestro reporte.

Los pasos interesantes son el 3 y el 4, as que ser en estos en los que nos enfocaremos ms.

El paso 1 se realiza de forma automtica, as que no tenemos mucho que hacer en l. En el paso 2
(en donde comenzamos) seleccionamos el directorio en el que queremos guardar nuestro reporte
y el nombre que tendr.
Nota: La extensin de documentos de reportes generados por JasperReports es ".jrxml" que
significa "jasper reports xml", y es un documento xml que contiene los datos para generar un
archivo compilado (".jasper") que es el que usaremos principalmente en nuestras aplicaciones Java
(aunque tambin podriamos optar por compilar nuestro archivo ".jrxml" desde la misma aplicacin
Java y as generar el archivo ".jasper" correspondiente).
En este momento no importa mucho en donde guardemos el archivo que se generar, ya que
posteriormente tendremos que moverlo para que nuestra aplicacin java pueda encontrarlo. Por mi
parte llamar al archivo "reporte1".
Hacemos clic en el botn "Next" para continuar con el paso 3. En este paso debemos seleccionar
el datasource desde el que los datos del reporte sern tomados. Por default est seleccionado el
"Empty datasource". As que nosotros seleccionamos el datasource "reportes" (el datasource que
creamos anteriormente).
Al hacer el cambio del datasource veremos que aparece un textarea con el ttulo "Query(SQL)" y
en la parte inferior debemos tener un mensaje de error que dice "Invalid query".



Esto ocurre porque, efectivamente, en el textarea no tenemos una consulta vlida (de hecho no
tenemos ninguna). Por lo que ahora corregiremos eso. Para esto tenemos 3 opciones:
1. Escribir una consulta nosotros mismos de forma directa.
2. Cargar una consulta que tengamos guardada en algn archivo .sql o .txt.
3. Crear una consulta usando el "diseador de consultas".

Nosotros haremos uso del diseador de consultas. Hacemos clic en el botn "Design query" con
lo que se abrir una nueva ventana que est dividida en tres secciones.



La primer seccin es la de la estructura de la consulta. Aqu bsicamente podremos cambiar entre
las sentencias que estamos editando (SELECT, WHERE, ORDER BY, etc.). La segunda seccin
es la de los elementos de nuestra base de datos (tablas, vistas, y temporales locales). Aqu
podremos seleccionar los elementos de los que queremos obtener datos para la consulta.
Finalmente la tercer seccin nos muestra los elementos que hemos seleccionado de la segunda
seccin para que podamos seleccionar los datos a obtener.
La consulta que haremos ser para obtener todos los datos de la tabla "participantes", con
excepcin del "ID". Para esto hacemos doble clic sobre el nombre de la tabla "participantes" en la
segunda seccin de la ventana que tenemos abierta. Con esto aparecer en la tercer seccin otra
ventana con el ttulo "participantes" y un conjunto de checkboxes, cada uno con un campo de
nuestra tabla. Para generar la consulta que nos interesa solamente seleccionamos todos los
checkboxes (con excepcin del "ID") y veremos que la consulta se genera en la primer seccin.
Ya solo damos clic en el botn "OK".



Con esto ya tendremos nuestra consulta en el textarea correspondiente y podemos continuar con
el paso 4, para lo que hacemos clic en el botn "Next".
En este paso solo tenemos que seleccionar cules campos del query generado en el paso anterior
queremos que se muestren en el reporte. Como nosotros queremos que se muestren todos pasamos
todos los campos del lado izquierdo al lado derecho y hacemos clic en el botn "Next".



Ahora en el paso 5 debemos seleccionar cmo queremos que los datos sean agrupados. Esto lo
explicar en algn otro post, pero por el momento dejemos todo en blanco y demos clic en el botn
"Next".

El ltimo paso es el solamente una felicitacin por haber creado un nuevo reporte.



Ahora hacemos clic en el botn "Finish" y ya podremos ver la plantilla de nuestro reporte.



Si queremos ver como se ver el reporte final, en este caso, podemos ver un preview con los datos
reales si cambiamos a la vista de "preview" en la ventana del editor.



Al hacer clic en la pestaa de "preview", nuestro reporte se compilar y se mostrar. En este caso
el reporte puede ser pre-visualizado porque las siguientes condiciones se cumplen:
Tenemos una base de datos poblada (esto es muy importante, ya que si no tiene datos
obtendremos un mensaje de error).
Tenemos un datasource configurado para esta base de datos.
Nuestro reporte hace una consulta directa a esta base de datos a travs del datasource
anterior.
El reporte est preparado para mostrar los datos recuperados anteriormente.

Podra ser que no todas estas condiciones se cumplan al mismo tiempo, por lo que tendremos
problemas para ver los datos en el preview del reporte.

Algo importante que ocurre al hacer este preview es que el reporte se compila generando el archivo
"reporte1.jasper" el cual es el archivo que usaremos desde la aplicacin Java que crearemos en un
momento.

Si queremos compilar nuestro reporte de forma manual podemos hacer clic en el botn "Compile
Report" de la vista de diseo:



Haremos algunas modificaciones para que este reporte se vea un poco mejor: primero
cambiaremos el ttulo que dice "Wood Title" por "Reporte de Participantes", cambiamos el color
de texto a negro, y eliminamos el fondo y el subttulo que tiene.
Adems cambiamos el ttulo de cada una de las columnas por algo ms claro. Por ejemplo,
podemos cambiar el ttulo de la columna "participantes_USERNAME" a "Usuario",
"participantes_NOMBRE" a "Nombre", etc.
Al final mi reporte queda de esta forma:



Con este preview:



Ahora que tenemos un reporte que nos agrada (o al menos que no se ve tan mal) veremos cmo
generar este reporte desde una aplicacin Java.
Nota: Hay algunas notaciones usadas en la plantilla del reporte que tal vez no comprendan como
$F{participantes_USERNAME} y $V{PAGE_NUMBER}. Esta es una sintaxis especial que usa
JasperReports para definir campos de objetos y variables, respectivamente. Existe otro tipo de dato
que se usa llamado propiedades ($P{propiedad}). Como todo esto fue colocado por el wizard no
lo explicar hasta el siguiente post, por ahora solo confen en que deben estar ah.

Lo primero que haremos es crear un nuevo proyecto en NetBeans. Para esto vamos al men "File
-> new Project...". En la ventana de nuevos proyectos seleccionamos la categora "Java" y de tipo
de proyecto seleccionamos "Java Application" y hacemos clic en el botn "Next". En la siguiente
ventana introducimos el nombre de nuestro proyecto y dejamos seleccionada la opcin "Create
Main Class" y "Set as Main Project".



Hacemos clic en el botn "Finish" para que nuestro proyecto se genere. Lo que haremos a
continuacin es crear una biblioteca que contenga los archivos jars bsicos necesarios de
JasperReports. De esta forma no tendremos que agregar cada uno de los jars cada vez que
necesitemos usar JasperReports en un proyecto. Adems si actualizamos la versin del API que
usamos, solo debemos actualizar esta biblioteca.
Para crear nuestra biblioteca vamos al men "Tools -> Libraries":



Con esto se abrir la ventana del "Library Manager". En esta ventana hacemos clic en el botn
"New Library":



En la ventana que se abre escribimos el nombre de la nueva biblioteca (en mi caso ser
"JasperReports") y en el tipo de la biblioteca seleccionamos la opcin "Class Libraries".



Al hacer clic en el botn "OK" regresaremos al "Library Manager" y tendremos nuestra nueva
biblioteca creada. Pero an nos hace falta agregar los archivos jars que conformarn esta biblioteca.
Nos aseguramos que la pestaa "Classpath" est seleccionada y hacemos clic en el botn "Add
Jar/Folder" situado a la derecha. Se abrir un cuadro de dialogo para que seleccionemos los jars
que queremos agregar.



Navegamos hasta el directorio en el que tenemos los jars de JasperReports que bajamos
anteriormente. Para que los ejemplos que haremos ms adelante (en los siguientes posts)
funcionen, debemos agregar a la biblioteca los siguientes jars:
jasperreports-3.7.6.jar
jasperreports-3.7.6-javaflow.jar
jasperreports-fonts-3.7.6.jar
commons-beanutils-1.8.0.jar
commons-collections-2.1.1.jar
commons-digester-1.7.jar
commons-logging-1.0.4.jar
commons-javaflow-20060411.jar
groovy-all-1.7.5.jar
iText-2.1.7.jar
png-encoder-1.5.jar
poi-3.6.jar

Algunos de estos jars se encuentran en el directorio "dist" y otros en el directorio "lib" del archivo
.zip de JasperRepots que bajamos anteriormente.
Hacemos clic en el botn "Add Jar/Folder" y con esto tendremos lista nuestra biblioteca
"JasperReports" para agregarla a nuestro proyecto.



Hacemos clic en el botn "OK" para regresar al ambiente de trabajo.
Ahora hacemos clic derecho en el nodo "Libraries" de la ventana "Projects". Con esto se abrir un
men contextual con 4 opciones, seleccionamos la opcin "Add Library..."



En la ventana que se abre seleccionamos la biblioteca que creamos anteriormente
("JasperReports") y hacemos clic en el botn "Add Library". Al hacer esto veremos se agregar al
nodo "Libraries" de nuestro proyecto todos los jars que tiene nuestra biblioteca.

Nota: Si no crearon la biblioteca como se indica en pasos anteriores pueden agregar cada uno de
los jars manualmente seleccionando la opcin "Add JAR/Folder..." del men contextual



Recuerdan que cuando vimos el preview del reporte que creamos en iReports se gener un archivo
"reporte1.jasper"? Tomamos este archivo y lo colocamos en el directorio raz del proyecto de
NetBeans que acabamos de crear (la raz del proyecto es el directorio en el que se encuentran los
subdirectorios "nbproject", "src", entre otros).



Ahora veremos el cdigo para generar el reporte en varios formatos.
Lo primero es crear una conexin a la base de datos que creamos anteriormente. Si recuerdan
nuestra base de datos se llama "pruebareportes". Por lo que el cdigo para generar la conexin en
el siguiente:

private Connection conexion;
public final static String
URL="jdbc:postgresql://localhost:5434/ pruebareportes";
public final static String DRIVER="org.postgresql.Driver";
public final static String USER="postgres";
public final static String PASS="1234ddas";

public Stock_Codigo(){
try {
Class.forName(DRIVER);
conexion=DriverManager.getConnection(URL,USER,PASS);
}
catch (Exception ex) {
}
}

Nota: No olvide agregar el jar del driver de PostgresqlSQL al proyecto al nodo "Libraries" de la
ventana "Project" usando la opcin "Add JAR/Folder" o tambin pueden agregar la biblioteca
"PostgreSQL JDBC Driver" que ya trae incluido el NetBeans, de la misma forma que agregamos
la de JasperReports.
Seguramente en este momento el NetBeans les est marcando un error en estas dos lneas que
hemos agregado. Esto es porque al tratar de hacer la conexin es posible que ocurra un error, y por
lo tanto es posible que se lance una excepcin de tipo "java.sql.SQLException". Para solucionar
esto pueden hacer dos cosas. La primera es rodear estas lneas (y las siguientes que crearemos) en
una clausula try/catch. La segunda opcin (la que yo usar) es agregar la clausula throws Exception
en el mtodo.
Lo siguiente que debemos hacer es cargar el archivo ".jasper" generado anteriormente y colocarlo
en un objeto "net.sf.jasperreports.engine.JasperReport". Para esto hacemos uso de la clase de
utilidad "net.sf.jasperreports.engine.util.JRLoader":

JasperReport reporte = (JasperReport) JRLoader.loadObject("reporte1.jasper");


Nota: Podemos cargar el archivo de esta forma gracias a que colocamos el archivo
"reporte1.jasper" en la raz del proyecto. Si lo colocaron en otra ubicacin ser necesario que pasen
como parmetro al mtodo "loadObject" la url absoluta en la que se encuentr el archivo.

Ahora el objeto "reporte" contiene la definicin del reporte, pero an hace falta que llenemos este
reporte con los datos que obtendr de la base de datos. Para esto usamos la clase
"net.sf.jasperreports.engine.JasperFillManager". Esta clase tiene un mtodo esttico, "fillReport",
que nos permite llenar el reporte con datos obtenidos de distintas fuentes de datos (una de estas
fuentes es la sentencia SQL que escribimos al generar el reporte con el wizard en iReports y la
conexin que usaremos en un momento, veremos qu otras fuentes de datos existen y cmo usarlos
en los siguientes posts). En este caso la fuente de datos es la conexin directa a la base de datos
que creamos anteriormente (el objeto conexion):

JasperPrint jasperPrint = JasperFillManager.fillReport(reporte, null,
conexion);


Pasamos "null" como segundo parmetro porque no estamos pasando ningn parmetro al reporte
(esto tambin lo veremos despus).
El objeto "JasperPrint" que obtenemos como resultado de la invocacin del mtodo "fillReport" es
la representacin de nuestro reporte (ahora con datos) que podemos mandar a imprimir, mostrar
en pantalla (si estamos usando una aplicacin swing o awt), o, como en este caso, guardarlo en un
archivo.

Si est haciendo una aplicacin swing y quieren mostrar este reporte directamente en un
componente pueden pasar el objeto "JasperPrint" que acabamos de crear como parmetro a un
nuevo objeto "net.sf.jasperreports.view.JasperViewer", el cual es un componente swing, y agregar
este ltimo a un panel.
Para guardar este reporte a un archivo debemos usar un "net.sf.jasperreports.engine.JRExporter".
"net.sf.jasperreports.engine.JRExporter" es una interface, y las clases que la implementan nos
permiten generar el reporte en distintos formatos de una forma sencilla. Veremos cmo generar
los reportes en los siguientes formatos:
PDF
HTML
CSV
RTF
TXT
XLS
XML
XLSX
DOCX
PPTX

Primero declaramos una referencia a un objeto de tipo "JRExporter" de la siguiente forma:

JRExporter exporter =


Ser esta referencia la que usaremos de ahora en adelante. Para que nuestro reporte sea guardado
en formato PDF creamos un objeto de tipo "net.sf.jasperreports.engine.export.JRPdfExporter" y
lo asignamos a nuestra referencia exporter:

JRExporter exporter = new JRPdfExporter();


Ahora, las siguientes lneas son comunes no importando el formato en el que vaya a quedar nuestro
reporte:

exporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE,new
java.io.File("reportePDF.pdf"));
exporter.exportReport();
La primer lnea asigna a nuestro objeto "exporter" el "jasperPrint" (el reporte con datos) que
creamos anteriormente. La segunda lnea le dice al "exporter" cul ser el nombre del archivo
generado (en este caso "reportePDF.pdf"). Recuerden cambiar el nombre y la extensin del archivo
cada vez que cambiemos de formato.

La ltima lnea es la que realiza el proceso de exportacin.
Si ahora ejecutamos nuestra aplicacin veremos que en el directorio raz del proyecto se ha creado
un archivo llamado "reportePDF.pdf":


Con el siguiente contenido:


Por lo que nuestra prueba ha sido exitosa.
Ahora, para que nuestro reporte sea exportado a formato HTML cambiamos la lnea:
JRExporter exporter = new JRPdfExporter();

por
JRExporter exporter = new JRHtmlExporter();

y el nombre del archivo de "reportePDF.pdf" a "reporteHTML.html". Al ejecutar nuevamente
nuestra aplicacin tendremos veremos que se genera el archivo "reporteHTML.html" en el
directorio raz de la aplicacin:


Con el siguiente contenido:



Como pudimos ver, con un par de modificaciones pudimos hacer que nuestro reporte se generara
en un formato completamente distinto. Con el resto de los formatos es igual de simple. Usamos
las siguientes clases para generar los reportes en los siguientes formatos:
PDF: net.sf.jasperreports.engine.exportJRPdfExporter
HTML: net.sf.jasperreports.engine.exportJRHtmlExporter
CSV: net.sf.jasperreports.engine.exportJRCsvExporter
RTF: net.sf.jasperreports.engine.exportJRRtfExporter
XLS: net.sf.jasperreports.engine.exportJRXlsExporter
XML: net.sf.jasperreports.engine.exportJRXmlExporter
TXT: net.sf.jasperreports.engine.exportJRTextExporter
XLSX: net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter
DOCX: net.sf.jasperreports.engine.export.ooxml.JRDocxExporter
PPTX: net.sf.jasperreports.engine.export.ooxml.JRPptxExporter
Entre muchos otros.
Para generar archivos .txt tendrn que agregar, adems, estas dos lneas:
exporter.setParameter(JRTextExporterParameter.CHARACTER_WIDTH, 12);//text
exporter
exporter.setParameter(JRTextExporterParameter.CHARACTER_HEIGHT, 12);//text
exporter

NOTA: Para ver ms detalladamente el cdigo se puede revisar el cdigo de la aplicacin
que ha sido entregado por los desarrolladores de la aplicacin.
Autores
Mario Andrade mariofernip@hotmail.com y Claudio Padrn logancf_45@hotmail.com

Das könnte Ihnen auch gefallen