Bases de Datos, Java, MySQL, Programación

Creación de Reportes en Java – Parte I

En este post hablaba sobre la incorporación de iReport a NetBeans 6.0 con el plugin que sacaron los mismos desarrolladores de iReport (veáse para conocer el link de descarga y la instalación en NetBeans 6.5)

Ahora que ya tenemos incorporado iReport en NetBeans, vamos a ver como generar un sencillo reporte. (Nota: El plugin solo funciona con la versión final 6.0 de NetBeans)

HERRAMIENTAS UTILIZADAS

  • NetBeans 6.5
  • Plugin iReport para NetBeans 3.1.2
  • MySQL 5
  • El proyecto completo se puede descargar de aqui:

http://www.mediafire.com/?dz9cxgtigzt

http://www.mundobyte.net/archivos/Java_2007/Ejemplo_Reportes.zip

el archivo se llama Ejemplo_Reportes.zip

CREACIÓN DE LA BASE DE DATOS

Aunque si es cierto que adjunto tambien la carpeta del proyecto de NetBeans, obviamente que es recomendable realicen este ejercicio por cuenta propia pues les servira como práctica.

El script sql esta adjunto en la carpeta bajo el nombre de addressbook.sql, y contiene una simple y sencilla tabla a modo de ejemplo para este ejercicio.

Para ejecutar dicho script y crear la base de datos, basta con entrar a la línea de comandos de MySQL y escribir:

source C:\addressbook.sql

donde obviamente deben sustituir la ruta por donde se encuentra tal fichero. Si se tiene la herramienta MySQL Administrator, se puede restaurar el backup de este script sql. Con esto ya tendremos la BD creada.

Connections/DataSources

Una vez instalado el plugin y creada la BD, vamos a establecer la conexión a la Base de Datos por medio de JDBC pero antes de eso, debemos establecer el classpath donde se encuentra el driver JDBC para nuestro DBMS, en este caso el driver Connector/J. Dicho conector viene por defecto con NetBeans, se puede encontrar en la ruta /usr/local/netbeans-6.5/ide10/modules/ext

En el menú Herramientas–Opciones buscamos en la parte superior un botón con el logo de iReport y le damos clic para posteriormente ir a la pestaña de CLASSPATH. Agregamos el fichero jar del driver y con esto ya podemos pasar a establecer la Conexión a la BD.

Vamos al menú Herramientas – Report DataSources y pulsamos sobre el botón New para agregar una nueva conexión. Aparecera una ventana como la mostrada en la imagen.

DataSource_Ireport

Tenemos varias opciones las cuales no explicaré (además que no he usado todas). Usaremos una conección JDBC que es la que debemos usar para conectarnos a DBMS como MySQL, PosgreSQL, Oracle, entre otros más, por lo cuál seleccionaremos la segunda opción «NetBeans DataBase JDBC Connection».

Posteriormente pasaremos a otra ventana en donde debemos seleccionar la conexión que previamente establecimos en NetBeans

datasource2_ireport.png

Una ves guardados los cambios deberemos agregar un archivo visual para diseñar nuestro reporte, para ello vamos al «source package» (Paquete de fuentes) y agregamos un «Empty Report» (si no aparece en la lista, lo buscamos en otros). Al hacer esto, aparecera en NetBeans el diseñador visual de iReport. Tendremos un área dividida varias regiones, PageFooter, columnFooter, columnHeader, etc. Para más información referente a cada una de ellas puede visitar el siguiente tutorial, aunque maneja una versión algo vieja de iReport sirve como referencia o bien, se puede buscar más información en internet.

Para este ejemplo, solo vamos a utilizar las regiones de title, pageHeader, columnHeader, detail y pageFooter, por lo cuál deberemos ocultar las demás estableciendo un valor de 0. En uno de los paneles izquierdos que hay en NetBeans encontraremos algo como lo que muestra la siguiente imágen.

parametros_ireport.png

Por lo tanto, deberemos seleccionar las regiones sobrantes y en el panel de propiedades que esta en el lado derecho, debemos establecer el valor de Band height a 0 y con esto notaremos que desaparecerá dicha región en el área de diseño.

Una vez hecho lo anterior, solo deberemos tener en el área de diseño las 5 regiones mencionadas con anterioridad.

Podemos observar que en el panel derecho tenemos una pequeña paleta de componentes. Entre ellos el Static Text y Text Field.

La diferencia entre ámbos es que el Static Text es en si como su nombre lo dice, «Texto Estático», es decir, nos va servir para poner los rotulos y titulos de nuestros reportes. En cambio, el Text Field sirve para mostrar los resultados de la consulta a la Base de Datos para generar nuestro reporte.

Antes de hacer el diseño, primero vamos a establecer la consulta y a definir las variables necesarias. En el menú File–Report query deberemos escribir la consulta SQL. Haga click en la figura de abajo para ver su tamaño original y observe la sencilla consulta SQL y el resultado que nos genera en la parte de abajo. Realice esto mismo y al término presione el boton de OK.

query_ireport.png

En el panel de la izquierda de iReport, veremos que al desplegar la opción de Fields, tendremos los campos que deseamos obtener con la consulta SQL. En este caso, tendremos name, telefono, email.

Ahora ya estamos listos para diseñar el reporte. En la segunda parte de este breve tutorial veremos como hacerlo.

75 comentarios en “Creación de Reportes en Java – Parte I

  1. Estuve checando el tutorial y lo empece a aplicar, pero me trabe en una parte: cuando le doy click en tool-iReport Claspath no me aparece nada, espero k me ayuden

  2. hola, sigo atorado todavia en la parte del tutorial k dice Connections/DataSources le doy click y no me aparece nada, agregue el driver con Services y ya esta conectada la Base de Datos, le doy click en tool-iReport Claspath y me sigue sin aparecer nada…porfa me urge saber hacer reportes

  3. Sigo todavia atorado, le doy click en Connections/DataSources pero no me aparece nada, ya baje el conector y lo instale con la pestaña SERVICES y la la BD ya esta conectada, le doy click en el tool-iReport Claspath y me sigue sin aparecer nada.

  4. Mis respetos mi hermano mis respetos demasiado bueno el tutorial me quito el sombrero ante usted y no solo eso la pagina esta super excelente demasiado buena pero buena estuve dando vueltas por ella y me intereso el ejemplo de rmi lastima que no le hiciste un tutorial igual a este pero mis respetos esta sobrado.

    Gracias

  5. no pude hacer el reporte, me pasa igual que al tipo de arriba,
    me sale este error cuando quiero darle test a la conexion:
    ClassNotFoundError!
    Msg: com.mysql.jdbc.Driver
    Possible not found class: com.mysql.jdbc.Driver

    ojala y puedas ayudarme por q necesito mucho sacar el reporte

  6. Pues lo único que pasa es que no encuentra el driver JDBC para mysql. Solamente revisen que estan haciendo todo correcto paso por paso, y que han agregado el driver a su proyecto ó verificar que MySQL se esta ejecutando, para esto último basta con entrar a la linea de comandos y teclear:

    mysql -u root -p password

    y si logran entrar, entonces es el driver que no lo estan agregando correctamente.

    Por otro lado, como el tutorial lo decia, el plugin de iReport era una versión BETA, en febrero se tenia planeado salir la versión final. Aparecio otra version 6.01 de netbeans, visiten su página oficial y actualicen sus versiones (yo aun no lo hago).

    saludos!!
    saludos!!

  7. si era lo que tu decias, pero ahora no me aperece el diseñador visual de iReport donde me meto para que me aparezca, ojalá y puedas ayudarme……. saludos a todos ….. 🙂

  8. Me aparece el mismo error:
    ClassNotFoundError!
    Msg: com.mysql.jdbc.Driver
    Possible not found class: com.mysql.jdbc.Driver

    Tengo instalado el conector para mysql (ya lo estaba usando en mi proyecto en la version anterior de Netbeans 5.5) y ahora lo instalé en la nueva version 6.0.1.
    De todas formas, no tengo ningún menú «Tools – iReport», y he instalado el plugin para iReport. He llegado a la ventana del dibujo desde «Tools -> Report Datasources -> New».
    Tampoco tengo ningún menú «Data».
    ¿¿Por qué???

  9. Hola,

    NO cito ningún tutorial x ke no me base en ningún tutorial, fue algo que aprendi a hacerlo con iReport hace muchos meses y ahora que salio el plugin para netbeans fue realmente fácil hacerlo.

    saludos!!

  10. Saludos,

    Pero no me quiere reconocer el driver de MySQl y yo hago bien mi conexion desde la aplicacion que podria hacer en este caso?

    Gracias

  11. Hola a todos!
    Para los que les ha salido el problema de
    ClassNotFoundError!
    Msg: com.mysql.jdbc.Driver
    Possible not found class: com.mysql.jdbc.Driver

    O problemas con los path, asegurense de dejar el driver jdbc (el .jar que bajaron desde mysql) en el directorio lib/ de la maquina virtual de java que esten ocupando.

    Ahora, mi consulta windoctor… en mi proyecto tengo unas clases Dao para acceder a los datos. ¿Sabes como puedo hacer uso de estas clases y no hacer directamente las consultas a través del jdbc?
    Agradecido por la respuesta!
    Saludos!
    Roberto

  12. Hola que tal estoy haciendo un sistema y necesito generar reportes soy principiante en Java y la verdad no tengo ni idea como se hacen. he estado leyendo sobre el tema, aunque que tengo una duda pues estoy utilizando Access como BD y no se si si se pueden hacer??
    Help´me!!

  13. Que tal. tengo el mismo problema:

    ClassNotFoundError!
    Msg: com.mysql.jdbc.Driver
    Possible not found class: com.mysql.jdbc.Driver

    La libreria ya esta cargada en el proyecto, el driver esta actualizado y en su lugar (Lo utilizo para otras operaciones y funciona), que podria ser?

  14. Disculpe mi ignorancia, ya desarrolle el reporte en ireport, pero no lo puedo llamar desde un link, cual será el problema.
    gracias
    orlando

  15. Hola a todos, soy nuevo en java y estoy probando el ireport con NetBeans 6.0, mi pregunta es si puedo pasarle una conexión establecida con usuario y contraseña desde el netbeans o por lo menos usuario y contraseña en una variable a mi conexion del reporte

    Desde ya gracias

  16. De vuelta por acá, el problema de los Class not found se debe a que no sólo basta con instalar el PLUG IN, sino que una vez instalado hay que agregar la libreria al proyecto

    Para eso, click derecho sobre la carpeta Libraries y Add Librarie, seleccionar JasperReport 2.0.5-SnapShot y click an Add Librarie

    Con esto se soluciona todos los males incluso lo mencionado en la Parte III de este tutorial

    Aquí un link, si me sale:

    http://wiki.netbeans.org/ReportesEnNetBeansConIReport

  17. Cuando ejecuro el reporte me da error master null
    No encuentra la ubicación del reporte ya lo copie en dist pero el ejemplo suyo si me sirve pero cuando intento hacer el mio no

  18. HOLA.
    YA REALIZÉ TODOS LOS PASOS Y TE AGRADEZCO MUCHO PORQUE SI FUNCIONA Y MUY BIEN PERO TENGO UN PROBLEMA, NO PUEDO VER LOS QUE LLAMAS «»DISEÑADOR VISUAL DE IREPORT»».
    PORFAS, TE LO AGRADECERÍA AÚN MÁS.

  19. Pues luego de DataBase JDBC Connection donde conecto a mi BD deberia salirme el diseñador de IReport pero no me sale, hago el test y todo bien pero no encuentro como sacar el diseñador

    ayuda pls que me urge

  20. perdon soy el mismo de arriba pero no se si aparte del plugins de ireport para netbeans 6 tengo que tener Ireport (no el plugin) instalado o que, porque segun las herramientas a utilizar solo necesito el plugin

  21. Hola, primero te felicito por el tutorial, está bestial; luego quiero hacerte una consulta, al abrir el reporte creado hay tres pestañas: Designer, XML y Preview. Bien ps la hacer clic en Preview empieza a compilar y generar el reporte, pero en este último paso me sale una excepcion del siguiente tipo:

    javax.xml.parsers.FactoryConfigurationError

    Si puedes ayudarme te lo agradecería bastante

  22. estoy empezando en esto y me sale el mismo error que el men anterior

    javax.xml.parsers.FactoryConfigurationError

    Si puedes ayudarme te lo agradecería bastante

  23. Hola tambien me sale ese mismo error al hacer click en Preview y aun no se por que

    javax.xml.parsers.FactoryConfigurationError

    por fa si alguien soluciono eso que me diga como lo hizo

  24. Hola, muy bueno el tutorial de NetBeans y Jasper asi como el de Visual JSF..pero tengo el siguiente problema: Descargue y estoy probando el ejemplo que publicaste, pero al ejecutarlo manualmente (desde contactos.jrxml) me muestra el reporte muy bien; pero al hacerlo desde la aplicacion Java envia un error que dice: «Error cargando el reporte maestro»..¿Alguien me puede ayudar?? por fa’, necesito aprender a generar reportes desde java con urgencia

  25. Compañero Carlos Fernando… El problema que tienes radíca en la clase ReporteAgenda.java… Hay una línea que dice «String master = System.getProperty(«user.dir») +
    «/reportes/contactos.jasper»;» debes cambiar por «String master = System.getProperty(«user.dir») +
    «/src/reportes/contactos.jasper»;» para que se puede encontrar el reporte maestro… Espero haberte podido ayudar

  26. Map parametro = new HashMap();
    parametro.put(”fech_ini”, fecha1);
    parametro.put(”fech_fin”, fecha2);
    parametro.put(”Total”, total);

    Hola me pueden decir de donde salen esos valores por ejemplo fecha1 o fecha se supone que esos valores los extraen desde un formulario java como capturan su valor necesito preguntar por dos parametros y aun no he podido hacerlo

  27. Hola Andres Rojas, gracias por tu ayuda, pero desafortunadamente ahora me presenta otro problema y es que al ejecutarlo me muestra lo siguiente: «masterC:\Documents and Settings\Administrador\Mis documentos\NetBeansProjects\Ejemplo_Reportes/src/reportes/contactos.jasper
    Mensaje de Error:null». De igual manera gracias por tu interes y ayuda y no sobra decirte que cualquier ayuda mas te la gradezco..

  28. Alberto: Si no me equivoco; esos salen de los cuadros de texto o seleccion o variables que hayas declarado y que tengas en la clase, por ejemplo si el parametro fecha1 lo capturaste a traves de un cuadro de texto, la cosa seria asi:
    JTextField fecha = new JTextField();
    String fecha1 = fecha.getText(); Si parametro.put(…) lo tienes en otro metodo, tienes que enviarle como parametro al metodo donde este el metodo put(:::) la variable fecha1..

  29. Estimado Carlos Fenando, ese error está raro… Si deseas podrías postear tu email y con gusto te mandaría mi proyecto netbeans para ver si este también te presenta error y ver como podemos solucionarlo

  30. Hola, primero te felicito por el tutorial: luego quiero hacerte una consulta, al abrir el reporte creado hay tres pestañas: Designer, XML y Preview. Al hacer clic en Preview empieza a compilar y no me sale nada y se regresa a la pestaña Designer porque responderme es urgente. La prueba la estoy haciendo con sql

  31. Hola, tengo el mismo problema de carlos fernando pero no esta puesta una solucion, podrian ayudarme?
    Este es el error:
    Error cargando el reporte maestro: java.io.FileNotFoundException: C:\Ejemplo_Reportes\reportes\contactos.jasper
    Y probe cambiar el string por “String master = System.getProperty(”user.dir”) +
    “/src/reportes/contactos.jasper”;”
    Pero me da este error:
    masterC:\Ejemplo_Reportes/src/reportes/contactos.jasper
    Mensaje de Error:null

    Alguien tendria alguna solucion Por favor, Gracias

  32. Hola gente, hermoso el tutorial, pero tengo un pequeño inconveniente… jamas puedo ver el reporte en tiempo de ejecucion, compila sin errores, pero cuando voy al preview se queda pensando con la leyenda «report1 (Generating report)

  33. alguien me pude dar una mano para iniciar un reporte con iReport. Segui las instrucciones de este codigo pero no me sale.
    Gracias

  34. Que tal, alguien me puede ayudar a generar un reporte dinámico?
    Lo que necesito es que desde Java yo le diga que columnas quiero que aparezcan en el reporte, tengo un reporte ya hecho pero siempre me muestra las 8 columnas que tengo, y quiero que al marcar varios CheckBox estos indique que columnas se van a mostrar

  35. Que tal, alguien me puede ayudar a generar un reporte dinámico?
    Lo que necesito es que desde Java yo le diga que columnas quiero que aparezcan en el reporte, tengo un reporte ya hecho pero siempre me muestra las 8 columnas que tengo, y quiero que al marcar varios CheckBox estos indique que columnas se van a mostrar
    E-Mail= cedav3000@gmail.com

  36. Saludos, he generado el reporte dentro de netbeans sin problemas, pero cuando genero el .jar me muestra la pantalla, los datos pero cuando quiero generar el reporte no hace nada… no muestra ningun reporte, que falta…

    1. Hola betsy, me podrias hacer el favor de decirme de que manera hiciste para que te funcionara en netbeans y además saber si ya solucionaste para que te funcionara con el . jar…..

      tambien te dejo mi e-mail umov@hotmail.com

      para que me puedas colaborar…

      gracias…

    2. cuando genere el .jar quitar el dist

      String master = System.getProperty(«user.dir») +
      «/dist/Reportes/reportProfesores.jasper»;

      y dejar solo

      String master = System.getProperty(«user.dir») +
      «/Reportes/reportProfesores.jasper»;

  37. Tengo un problemita ..
    Al ejecutar el reporte me envia un error
    Mensaje de Error:null
    pero el codigo esta identico al del ejemplo….
    Alguien podria decirme q es

    1. Al ejecutar el reporte me envia un error
      Mensaje de Error:null
      pero el codigo esta identico al del ejemplo….

      Hola podrias confirmar como solucionaste este problema, cuando ejecutas el ejemplo descargado desde Internet funciona correctamente pero cuando lo compilo en el ireport 3.7.4 genera lo siguiente Mensaje de Error:null

  38. Hola a todos. Tengo un problema que espero q me ayuden a solucionarlo.

    Estoy desarrollando una aplicacion cliente-servidor, en el q tengo q generar reportes entre otras cosas.
    El problema esta en que quiero q el reporte se genere en el cliente mientras q los datos y demas se preparen en el servidor.

    Para la generacion de reportes uso Dynamic Jasper, por lo q esta dificil encontrar info sobre ese tema.
    Quisiera saber si ustedes saben como llegar a hacerlo.

    Desde ya muchas gracias.

  39. Hola ke tal como stan..

    Quisiera que me ayudaran…

    ya hice todos los pasos del tutorial…
    pero al momento de compilar el archivo…
    me manda un erro en

    import net.sf.jasperreports.engine.*;
    import net.sf.jasperreports.engine.util.JRLoader;
    import net.sf.jasperreports.view.*;

    y no se ke es lo que me falta

    me gustaria que me ayudaran…necesito imprimir inventarios…
    y es lo que me esta fallando

    espero su respuesta….gracias

    unn saludo…

    PD- Aqui estta mi correo por si alguien gusta ayudarme…voxragdeath_corvus@hotmail.com

  40. Hola a todos voy al grano. Tengo Netbeans 6.5 Instalado, con el appserv. El ejemplo que descargue es uno muy famoso de internet. Total, y tengo la base de datos conectada al IDE y EL PROGRAMA DE EJEMPLO QUE BAJE SI PUEDE generar el reporte. El problema viene que cuando modifico el reporte, o sea, cuando abro el jrxml y con tan solo darle el preview, ya no se puede generar el reporte. El mensaje de error que me aparece cuando cuando entro al jrxml y le doy preview es:

    Cargando desdeF:\SAIN\Pruebas\Ejemplo_Reportes/reportes/contactos.jas per

    Mensaje de error: Null

    El mensaje que me aparece cuando NO LE MUEVO NO LE DOY PREVIEW AL JRXML Y ME GENERA EL REPORTE SIN PROBLEMAS:

    Cargando desdeF:\SAIN\Pruebas\Ejemplo_Reportes/reportes/contactos.jas per
    BUILD SUCCESSFUL (total time: 10 seconds)

    ¿Alguien sabe que significa esto?

  41. Ante todo gracias, por el manual, sin embargo hay algo que me tomo 5 minutos de tiempo, en la parte de elegir la conexion ud, menciona el tipo de conexion «NetBeans DataBase JDBC Connection», y luego elegir una conexion, en mi caso tube que elegir la opcion «DataBase JDBC Connection» para asi crear una conexion.

  42. Hola.!! muy bueno tu tutorial. Soy nueva usando ireport, ya stuve leyendo los post, pero no he podido solucionar el error de

    ClassNotFoundError!
    Msg: com.mysql.jdbc.Driver
    Possible not found class: com.mysql.jdbc.Driver

    Descargue el driver del llink, lo agregue al path, pero al crear la conexion me da este error.. Si me pudieran ayudar

    Gracias.

  43. holaaaaaaaaaa necesito algo de ayuda el cuento es que sigo los pasos pero si realizo el test en la ventana donde doy el nombre de la base de datos me sale que no esta la clase jdbc.mysql.driver…. 😦 ando preocupado es un software que debo entregar pronto si me pueden ayudar se los agradeceré toda la vida 🙂

  44. ¿Como podria sacar un reporte de un arreglo de datos, que estoy utilizando en mi aplicación?.
    Se podria instanciar alguna objeto del ireport para que guarde mis datos en vez de guardarlos en un arreglo de NetBeans.
    Gracias por la respuesta.

  45. Hola exelente tutorial me he ido giando de su ejemplo.. pero cuando lo compilo me sale un error y no entiendo no se si me hace falta agregar algun jar o xq el error.

    El error es el siguiente:
    Error cargando el reporte maestro: java.io.FileNotFoundException: C:\Users\Carla\Documents\plugins para netbeans de ireport\Ejemplo_Reportes\reportes\contactos.jasper

    les agredeceria su respuesta lo mas pronto posible… Gracias!!..

    1. Bueno a mi tambien me pasaba lo mismo entonces cambia esta linea.
      String master = System.getProperty(«user.dir») +
      «/src/reportes/contactos.jasper»;

  46. buenas noches alguien podria ayudarme. Cuando busco el reporte me devuelve un valor null, ya he probado muchas formas pero hasta ahora nada y llevo 2 dias en el mismo error. Este es mi codigo:

    public void onClick$btnpdf() throws SQLException, ClassNotFoundException, JRException {

    try{
    System.out.println(«entrooo 1»);
    Class.forName(«org.postgresql.Driver»);
    Connection con=DriverManager.getConnection(«jdbc:postgresql://localhost:5432/velitbd»,
    «postgres» , «123»);

    String jasperReport = System.getProperty(«user.dir») + «/prototipov3/reportes/report2.jrxml»;
    System.out.println(this.getClass().getResourceAsStream(jasperReport));

    if(this.getClass().getResourceAsStream(jasperReport)==null)
    Messagebox.show(«nuloooooooooooooooooooo»);
    else{

    System.out.println(«entrooo 55555″);
    String funciona=»yujuuu»;
    parameters.put(«fun», funciona);
    JasperPrint print = JasperFillManager.fillReport(jasperReport,parameters,con);
    System.out.println(«entrooo 666»);

    //4-Exportamos el reporte a pdf y lo guardamos en disco
    JasperExportManager.exportReportToPdfFile(print,jasperReport);
    JasperViewer.viewReport(print, false);
    JasperViewer jviewer = new JasperViewer(print, false);
    jviewer.setVisible(true);

    }
    }
    catch(Exception e){}

    }

    qué estaré haciendo mal, trabajo con eclipse e iReport 4.5.1

    1. Hola Liliana, en:

      if(this.getClass().getResourceAsStream(jasperReport)==null)
      Messagebox.show(“nuloooooooooooooooooooo”);
      else{

      Tienes que poner al final este código: 8====D

  47. hola espero me puedan y quieran ayudar tengo que hacer un reporte en netbeans pero me sale solo a base de datos pero lo que yo quiero es que me imprima los datos que tengo en una pantalla osea que imprima los datos de una consulta que tengo ya echa gracias de antemano

Deja un comentario