¿Que nececitamos?
- Los archivos "rSample.jasper" y "rSample.jrxml" vistos en la primera parte de este tutorial
- Las librerias necesarias para ejecutar un reporte con iReport son:
- commons-beanutils-1.8.2.jar
- commons-collections-3.2.1.jar
- commons-digester-1.7.jar
- commons-javaflow-20060411.jar
- commons-logging-1.1.jar
- groovy-all-1.5.5.jar
- iText-2.1.7.jar
- jasperreports-3.7.2.jar
- Tambien necesitamos la libreria : MySQL JDBC Driver. para la conexion a la base de datos.
El Proyecto.
1. Crea un nuevo proyecto en netbeans, "iReport_Sample".
2. Añade las librerias mencionadas más arriba
3. Crea una clase iReportClass.java
4. Crea una clase conexion.java
5. Los archivos "rSample.jasper" y "rSample.jrxml"debes colocarlos en la misma carpeta del proyecto, osea:
6. Ahora ya debes tener algo como esto en Netbeans:
Si no es asi, revisa los pasos anteriores para poder continuar.
7. El codigo necesario para la clase conexion.java, es:
package ireport_sample; import java.sql.*; /** * @web http://jc-mouse.blogspot.com/ * @author Mouse */ public class conexion { static String bd = "dbSample"; static String login = "USUARIO"; static String password = "PASSWORD"; static String url = "jdbc:mysql://localhost/"+bd; Connection conn = null; /** Constructor de DbConnection */ public conexion() { try{ //obtenemos el driver de para mysql Class.forName("com.mysql.jdbc.Driver"); //obtenemos la conexión conn = DriverManager.getConnection(url,login,password); if (conn!=null){ System.out.println("Conexión a base de datos "+bd+". listo"); } }catch(SQLException e){ System.out.println(e); }catch(ClassNotFoundException e){ System.out.println(e); } } /* Permite retornar la conexión */ public Connection getConnection(){ return conn; } /* termina la conexion a la base de datos */ public void desconectar(){ conn = null; System.out.println("La conexion a la base de datos "+bd+" a terminado"); } }
Esta clase es la que nos ayuda a conectarnos con la base de datos, puedes saber mas de ella en: Clase conexion a base de datos.
8. El codigo para la clase iReportClass.java, es:
package ireport_sample; /* librerias de ireport*/ import java.net.URL; import java.util.HashMap; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.util.JRLoader; import net.sf.jasperreports.view.JasperViewer; /** * @web http://jc-mouse.blogspot.com/ * @author Mouse */ public class iReportClass { //se estable una conexion con la base de datos private conexion con = new conexion(); /* reporte sencillo con conexion a base de datos MySQL, * el reporte no cuenta con parametros */ public void reporte(){ JasperReport reporte; JasperPrint reporte_view; try{ //direccion del archivo JASPER URL in = this.getClass().getResource("rSample.jasper"); reporte = (JasperReport) JRLoader.loadObject( in ); reporte_view= JasperFillManager.fillReport( reporte, new HashMap(), con.getConnection() ); JasperViewer.viewReport( reporte_view ); //terminamos la conexion a la base de datos con.desconectar(); }catch (JRException E){ E.printStackTrace(); } } }
Nuestro reporte es sencillo, no cuenta con parametros de entrada ni imagenes, lo unico que hacemos es instanciar nuestro archivo JASPER para luego lanzar el JASPERVIEWER y ver nuesotro reporte desde netbeans.
9. Finalmente el codigo para llamar esta clase desde el Main, es:
package ireport_sample; public class Main { public static void main(String[] args) { new iReportClass().reporte(); } }
Los archivos utilizados para este proyecto estan en el siguiente enlace:
19 comentarios:
xfa necesitamos saber como llamamos un Reporte, desde un formulario, con elementos de menu...
lo hice tal cual como está y no funciona :(
este es el error
Exception in thread "main" java.lang.NullPointerException
at net.sf.jasperreports.engine.JRPropertiesMap.readObject(JRPropertiesMap.java:185)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1870)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1666)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1322)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1870)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1870)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:141)
at ireport_sample.iReportClass.reporte(iReportClass.java:26)
at ireport_sample.Main.main(Main.java:4)
Java Result: 1
el error te sale porque no encuentra las librerias para los reportes, te esta pidiendo la libreria llamda "reporte, que es como yo llame a la libreria de jaspert,si tu tienes las librerias con otro nombre con otro nombre debes llamarla con ese nombre y eliminar la referencia a "reporte"
Por favor explicanos un poco mas sobre el error, creo que todos los que lo hemos intentado nos hemos topado con el mismo problema, ayudanos por favor
Bueno ya lo logre, es el mejor tutorial que encontre y revise muchisimos, para los que no les funcione revisen que la versión de ireports sea la misma de jasperreports, y descarguen el jasperreports.zip completo y usen las librerias que vienen ahi, gracias
esta bueno tu tuto.. pero el link ya no existe seria bueno k lo volvas a subir...
hola e exo too = pero me salen estos errorres:
Conexión a base de datos Alumno. listo
Exception in thread "main" java.lang.NoClassDefFoundError: org/codehaus/groovy/runtime/callsite/CallSiteArray
at null_1308597235046_417097.$createCallSiteArray(calculator_null_1308597235046_417097)
at null_1308597235046_417097.$getCallSiteArray(calculator_null_1308597235046_417097)
at null_1308597235046_417097.(calculator_null_1308597235046_417097)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
Java Result: 1
GENERACIÓN CORRECTA (total time: 17 seconds)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
Hola
muchas gracias por el tutorial
me salio todo bien pero al implementar el código de la clase main me sale este error:
error: cannot find symbol
new ireportClass1().reporte();
symbol: method reporte()
location: class ireportClass1
por favor si puedes decirme que esta mal
gracias¡¡¡¡
Alert!
http://freakshare.com/files/iusdlkkm/iReportSample.rar.html
Podrias remplazar el link por que en este no Existe el archivo de descarga.
Nomas esi acerte notar .. Una OjEada con el link
Ya encontre la solucion efectivamente, el error sale porque yo lo editaba en ireport 4.1.3 y estaba hecho era en 3.7.2 y las librerias no son las mismas haganlo en 3.7.2 y solo editenlo
MUCHAS GRACIAS POR ESTE TUTORIAL, me detengo para agradecerte a usted por este blog, ya que me salvo con este problema para la escuela...
me gustaria que todo sepan que para realizar este ejmplo: deben de contar con la version 3.7.2 del jasper y las librerias 3.7.2.... yo tambien lo hize con la mas reciente y marca error.. saludos
Hola muchas gracias por el tutorial, a la primera no me funcionó, e intentando una y otra vez como siempre suele sucederme, copie el codigo que venia para descargar y lo pegue tal como está lo unico que hay que cambiar es el usuario y el pass para la conexion con mysql.
Gracias la verdad siempre vi este proceso muy engorroso, ahora lo veo mas compresible gracias a usted.
Saludos.
Atte.
Pablo
oye una pregunta y para crearlo jar como le haces para los reportes.
ayudame porfavor
HOLA JC RESPONDE ESTE COMENTARIO..DANDOLE VUELTAS A ESTE ERROR Y NO LO ENCUENETRO CON BASE D DATOS CONECTADA Y SIGUIENDO TUS PASOS INCLUYENDO TODAS LAS LIBRERIAS NO SE DOND ESTA EL ERROR X FA AYUDA..
Conexión a base de datos dbfactura. listo
Exception in thread "main" java.lang.NoClassDefFoundError: org/codehaus/groovy/runtime/callsite/CallSiteArray
at null_1369677276840_534773.$createCallSiteArray(calculator_null_1369677276840_534773)
at null_1369677276840_534773.$getCallSiteArray(calculator_null_1369677276840_534773)
at null_1369677276840_534773.(calculator_null_1369677276840_534773)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at java.lang.Class.newInstance0(Class.java:374)
at java.lang.Class.newInstance(Class.java:327)
at net.sf.jasperreports.engine.design.JRAbstractJavaCompiler.loadEvaluator(JRAbstractJavaCompiler.java:98)
at net.sf.jasperreports.engine.design.JRAbstractCompiler.loadEvaluator(JRAbstractCompiler.java:320)
at net.sf.jasperreports.engine.JasperCompileManager.loadEvaluator(JasperCompileManager.java:240)
at net.sf.jasperreports.engine.fill.JRFillDataset.createCalculator(JRFillDataset.java:421)
at net.sf.jasperreports.engine.fill.JRBaseFiller.(JRBaseFiller.java:428)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.(JRVerticalFiller.java:76)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.(JRVerticalFiller.java:86)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.(JRVerticalFiller.java:56)
at net.sf.jasperreports.engine.fill.JRFiller.createFiller(JRFiller.java:142)
at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:52)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:417)
at iReportClass.reporte(iReportClass.java:32)
at iReportClass.main(iReportClass.java:43)
Caused by: java.lang.ClassNotFoundException: org.codehaus.groovy.runtime.callsite.CallSiteArray
at java.lang.ClassLoader.findClass(ClassLoader.java:522)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
... 22 more
Java Result: 1
BUILD SUCCESSFUL (total time: 1 second)
nunca me salio ese error. pèro podria deberse a la incompatibilidad de versiones, hacemos el reporte en una version y desde netbeans usamos otra version y ahi es donde salen los errores :/
No son muy conocedor del tema, pero si les aclaro algo, la version del iReport que usan para crear el reporte, debe ser igual a las versiones de los iReport.jar de las librerias que se carguen en Netbeans
Att Juank
amigo me sale que no tiene paginas y mi reporte si tiene
Gracias por el aporte, este si me funciono :D
Publicar un comentario