Ensode.net
Google
 

Home
Blog
Guides
Tips
Articles
Utilities
Reviews
About Us
Contact us


Facebook profile

XML

Creating Database Reports With JasperReports
Bookmark and Share

Writing The Code

Finally, we need to write some code to retrieve the data from the database and generate the report. The following example demonstrates one way to accomplish this:


package net.ensode.jasperrdb;

//Non JasperReports related imports omitted

import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperRunManager;

public class JasperDbDemo
{
  public static void main(String[] args) throws SQLException
  {
    Connection connection = null;
    ResultSet resultSet = null;
    Statement statement = null;
    try
    {
      Class.forName("org.postgresql.Driver");

      String url = "jdbc:postgresql://localhost/mydb?user=user&password=secret";
      String query = " select c.course_cd, c.course_nm, i.first_nm, "
          + "i.last_nm from instructors i, courses c where "
          + "i.instructor_id = c.instructor_id order by course_nm";
      connection = DriverManager.getConnection(url);
      statement = connection.createStatement();

      resultSet = statement.executeQuery(query);

      File reportFile = new File("reports/Database_Report.jasper");

JasperRunManager.runReportToPdfFile(reportFile.getPath(), new HashMap(),
new JRResultSetDataSource(resultSet));
} catch (Exception e) { //handle the exception } finally { //boilerplate code to close the result set, statement, and exception } } }

Relevant sections of the code are shown in bold. This example assumes the JRXML file has already been compiled into a Jasper file. Refer to Getting Started With JasperReports if you need a refresher on how to accomplish this.

The runReportToPdfFile() method of the JasperRunManager class generates a report and immediately saves it as a PDF file, using the report name defined in the JRXML file as the file name. Its first parameter is a String containing the absolute path of the compiled report to be generated. Its second parameter is an instance of a class implementing the java.util.Map interface, it is used to pass any parameters to the report. In our example, we are not passing any parameters to the report, therefore we pass an empty HashMap as the second parameter to this method. The third parameter is an instance of a class implementing the net.sf.jasperreports.engine.JRDataSource interface. In our example, we pass an instance of net.sf.jasperreports.engine.JRResultSetDataSource.

The constructor of the JRResultSetDataSource takes the ResultSet containing the data we want to pass to the report as a parameter. After calling the runReportToPdfFile() method of the JasperRunManager class, the report is generated, exported to a PDF and saved to disk. A similar technique can be used for web applications, but redirecting the PDF report to the browser instead of saving it to disk. See Displaying JasperReports PDF Reports on the Browser for details.

Summary

This article demonstrated how to generate reports dynamically from database data using JasperReports. By using the JRResultSetDataSource utility class, a ResultSet is passed to the report, the data in the ResultSet is read from the compiled report, which is generated from the JRXML file.

Resources


Java EE 6 Development With NetBeans 7
Java EE 6 Development With NetBeans 7


Java EE 6 with GlassFish 3 Application Server
Java EE 6 with GlassFish 3 Application Server


JasperReports 3.5 For Java Developers
JasperReports 3.5 For Java Developers