natty

[Jasper] run Jasper Report from Java class

In jasper, java on October 3, 2008 at 5:42 pm

จริงๆ ก่อนหน้าจะเขียนเรื่องนี้ ควรเขียนการ run Jasper Report from JSP ก่อนนะเนี่ย แต่ไม่เป็นไร เอาอันนี้ก่อน

ได้วิธีการมาจาก ที่นี่ แต่ต่างกันที่ code การติดต่อ database นิดหน่อย และเราจะทำมันใน eclipse ไม่ได้รันแบบที่เค้าทำ

ก่อนอื่นสร้าง eclipse project เป็น java project แล้วเอา lib ต่อไปนี้ไปใส่ไว้ใน build path ของ eclipse

  • common-collection
  • common-logging
  • iReport
  • commons-javaflow
  • jasperreports
  • common-digester
  • common-beanutils
  • mysql-java-connector

และสร้าง ReportDriver.java ขึ้นมา ดังนี้

import java.sql.*;

import net.sf.jasperreports.view.JasperViewer;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.JasperReport;

import java.io.OutputStream;

public class ReportDriver {
/**
* Constructor for ReportDriver
*/
public ReportDriver() {
}
public static Connection connectDB(String databaseName, String userName, String password) {
Connection jdbcConnection = null;
try{
Class.forName("com.mysql.jdbc.Driver").newInstance();
String connectionURL = "jdbc:mysql://127.0.0.1:3306/test?user=root;password=root";
jdbcConnection = DriverManager.getConnection(connectionURL,userName,password);
}catch(Exception ex) {
String connectMsg = "Could not connect to the database: " + ex.getMessage() + " " + ex.getLocalizedMessage();
System.out.println(connectMsg);
}
return jdbcConnection;
}

/**
* Takes 4 parameters: databaseName, userName, password, reportFileLocation
* and connects to the database and prepares and views the report.
* @param databaseName holds database name,
* @param userName holds user name
* @param password holds password to connect the database,
* @param reportFile holds the location of the Jasper Report file (.jrxml)
*/
public static void runReport(String databaseName, String userName, String password,String reportFile) {
try{
JasperDesign jasperDesign = JRXmlLoader.load(reportFile);
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
Connection jdbcConnection = connectDB(databaseName, userName, password);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, jdbcConnection);
JasperViewer.viewReport(jasperPrint);
}catch(Exception ex) {
String connectMsg = "Could not create the report " + ex.getMessage() + " " + ex.getLocalizedMessage();
System.out.println(connectMsg);
}
}
public static void main(String[] args) {
//if (args.length == 4) {
String databaseName = "test" ;
String userName = "root";
String password = "root";
String reportFile = "Reports/test2.jrxml";
runReport(databaseName, userName, password, reportFile);
/*}/lse{
System.out.println("Usage:");
System.out.println("java ReportDriver databaseName userName password reportFileLocation");
}
return;*/

}
}

ใน code จะไปเรียกไฟล์ test2.jrxml ที่สร้างโดย iReport ดังนั้นเราต้องไปสร้างไฟล์นี้ก่อน ให้ต่อไปยัง database ตัวเดียวกับที่เราใช้ใน code นี้ เมื่อรัน main method ขึ้นมา ก็จะได้ report ที่ถูก view โดย JRViewer

Advertisements
  1. ข้อเสนอแนะ : เวลาใช้งาน test2.jrxml นั้นในระบบของการ test แต่หากนำไปใช้งานจริงต้อง compiler เป็น .jasper ด้วย ไม่งั้นช่วย runtime ใน JVM จะใช้งานไม่ได้.

  2. ข้อเสนอแนะ : เวลาใช้งาน test2.jrxml นั้นในระบบของการ test แต่หากนำไปใช้งานจริงต้อง compile เป็น .jasper ด้วย ไม่งั้นช่วย runtime ใน JVM จะใช้งานไม่ได้.

  3. […] [Jasper] run Jasper Report from Java class October 2008 2 comments 7.002046 100.457392 […]

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: