JasperReports con Base de Datos

Partiendo de un proyecto anterior con servlets y soporte para JasperReports, ahora crearemos un reporte cuyos campos se llenen desde la base de datos.

Modificamos el archivo pom.xml para agregar soporte JDBC para el motor de base de datos HSQLDB

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>jrwebapp</groupId>
 <artifactId>jrwebapp</artifactId>
 <packaging>war</packaging>
 <version>1.0-SNAPSHOT</version>
 <name>jrwebapp Maven Webapp</name>
 <url>http://maven.apache.org</url>
 <dependencies>
 <dependency>
 <groupId>javax.servlet</groupId>
 <artifactId>servlet-api</artifactId>
 <version>2.2</version>
 <scope>provided</scope>
 <optional>true</optional>
 </dependency>
 <dependency>
 <groupId>commons-beanutils</groupId>
 <artifactId>commons-beanutils</artifactId>
 <version>1.7.0</version>
 <scope>compile</scope>
 </dependency>
 <dependency>
 <groupId>commons-collections</groupId>
 <artifactId>commons-collections</artifactId>
 <version>[2.1,)</version>
 <scope>compile</scope>
 </dependency>
 <dependency>
 <groupId>commons-digester</groupId>
 <artifactId>commons-digester</artifactId>
 <version>[1.7,)</version>
 <scope>compile</scope>
 </dependency>
 <dependency>
 <groupId>commons-logging</groupId>
 <artifactId>commons-logging</artifactId>
 <version>[1.0,)</version>
 <scope>compile</scope>
 </dependency>
 <dependency>
 <groupId>eclipse</groupId>
 <artifactId>jdtcore</artifactId>
 <version>[3.1.0,)</version>
 <scope>compile</scope>
 </dependency>
 <dependency>
 <groupId>com.lowagie</groupId>
 <artifactId>itext</artifactId>
 <version>2.1.0</version>
 <scope>compile</scope>
 </dependency>
 <dependency>
 <groupId>jasperreports</groupId>
 <artifactId>jasperreports</artifactId>
 <version>3.0.0</version>
 </dependency>
 <dependency>
 <groupId>hsqldb</groupId>
 <artifactId>hsqldb</artifactId>
 <version>1.8.0.7</version>
 </dependency>
 <dependency>
 <groupId>junit</groupId>
 <artifactId>junit</artifactId>
 <version>3.8.1</version>
 <scope>test</scope>
 </dependency>
 </dependencies>
 <build>
 <finalName>jrwebapp</finalName>
 <pluginManagement>
 <plugins>
 <plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-compiler-plugin</artifactId>
 <version>2.0.2</version>
 <configuration>
 <source>1.5</source>
 <target>1.5</target>
 </configuration>
 </plugin>
 <plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-eclipse-plugin</artifactId>
 <version>2.4</version>
 <configuration>
 <downloadSources>false</downloadSources>
 <wtpversion>1.5</wtpversion>
 </configuration>
 </plugin>
 </plugins>
 </pluginManagement>
 </build>
</project>

Desde la consola ejecutamos el siguiente comando:

mvn clean install

Luego le damos soporte para WTP de eclipse:

mvn eclipse:clean eclipse:eclipse

Modificar el método execute de JRServlet.java en la siguiente manera:

protected void service(HttpServletRequest request,
 HttpServletResponse response) throws ServletException, IOException {
 try {
 Connection con;
 String jdbcDriver = "org.hsqldb.jdbcDriver";
 Class.forName(jdbcDriver);

 String jdbcUrl = "jdbc:hsqldb:hsql://localhost";
 String user = "sa";
 String password = "";
 con = DriverManager.getConnection(jdbcUrl, user, password);

 ServletContext sc = getServletConfig().getServletContext();
 String jrxmlPath = "/WEB-INF/classes/reports/PrimerReport.jrxml";
 String jasperPath = "/WEB-INF/classes/reports/PrimerReport.jasper";

 InputStream is = sc.getResourceAsStream(jasperPath);

 if (is == null) {
 String rp = sc.getRealPath(jrxmlPath);
 JasperCompileManager.compileReportToFile(rp);
 is = sc.getResourceAsStream(jasperPath);
 }

 ServletOutputStream sos = response.getOutputStream();
 JasperRunManager.runReportToPdfStream(is, sos, new HashMap(), con);

 response.setContentType("application/pdf");
 sos.flush();
 sos.close();

 } catch (JRException e) {
 StringWriter sw = new StringWriter();
 PrintWriter pw = new PrintWriter(sw);
 e.printStackTrace(pw);
 response.setContentType("text/plain");
 response.getOutputStream().print(sw.toString());
 } catch (ClassNotFoundException e) {
 StringWriter sw = new StringWriter();
 PrintWriter pw = new PrintWriter(sw);
 e.printStackTrace(pw);
 response.setContentType("text/plain");
 response.getOutputStream().print(sw.toString());
 } catch (SQLException e) {
 StringWriter sw = new StringWriter();
 PrintWriter pw = new PrintWriter(sw);
 e.printStackTrace(pw);
 response.setContentType("text/plain");
 response.getOutputStream().print(sw.toString());
 }

 }

Abrir el archivo PrimerReport.jrxml y editar de la siguiente manera:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jasperReport
PUBLIC "-//JasperReports//DTD Report Design//EN"
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport name="PrimerReport">
 <queryString>
 <![CDATA[select c.course_id,
 c.name,
 c.course
 from course c]]>
 </queryString>
 <field name="course_id"/>
 <field name="name"/>
 <field name="course"/>
 <pageHeader>
 <band height="30">
 <staticText>
 <reportElement x="0" y="0" width="69" height="24"/>
 <text>
 <![CDATA[ID: ]]>
 </text>
 </staticText>
 <staticText>
 <reportElement x="140" y="0" width="79" height="24"/>
 <text>
 <![CDATA[PROFESOR: ]]>
 </text>
 </staticText>
 <staticText>
 <reportElement x="280" y="0" width="69" height="24"/>
 <text>
 <![CDATA[CURSO: ]]>
 </text>
 </staticText>
 </band>
 </pageHeader>
 <detail>
 <band height="30">
 <textField>
 <reportElement x="0" y="0" width="69" height="24"/>
 <textFieldExpression>
 <![CDATA[$F{course_id}]]>
 </textFieldExpression>
 </textField>
 <textField>
 <reportElement x="140" y="0" width="69" height="24"/>
 <textFieldExpression >
 <![CDATA[$F{name}]]>
 </textFieldExpression>
 </textField>
 <textField>
 <reportElement x="280" y="0" width="69" height="24"/>
 <textFieldExpression  >
 <![CDATA[$F{course}]]>
 </textFieldExpression>
 </textField>
 </band>
 </detail>
</jasperReport>

Ahora desplegamos la aplicación en el contenedor y el resultado seria el siguiente:

Web DB Report

Web DB Report

Es todo.

Etiquetas:

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: