Multiple Database Sources থেকে Data Fetch করা

JasperReports এবং Database Integration - জ্যাসপার রিপোর্ট (JasperReports) - Java Technologies

338

JasperReports-এ multiple database sources থেকে ডেটা ফেচ করা একটি সাধারণ এবং শক্তিশালী ফিচার। এটি আপনাকে একাধিক ডেটাবেস, টেবিল বা JDBC সোর্স থেকে ডেটা একত্রিত করতে সাহায্য করে। আপনি বিভিন্ন ডেটাবেস বা ডেটাসোর্সে কোয়েরি চালিয়ে সেগুলোর ফলাফল রিপোর্টে মিশিয়ে দেখাতে পারেন।

Multiple Data Sources এর উদ্দেশ্য:

  • একাধিক ডেটাবেস সংযোগ থেকে ডেটা প্রাপ্তি।
  • Joins করতে না পারলে আলাদা আলাদা ডেটাসোর্স থেকে ডেটা ফেচ করা।
  • একাধিক টেবিল বা ভিউ থেকে রিপোর্ট তৈরি করা।
  • কোডের মাধ্যমে বিভিন্ন সোর্স থেকে ডেটা একত্রিত করা।

এই উদাহরণে, আমরা দুটি আলাদা ডেটাবেস থেকে ডেটা ফেচ করব এবং সেগুলোর সাথে JasperReports ব্যবহার করে রিপোর্ট তৈরি করব।


ধাপ ১: Multiple Data Sources তৈরি করা

আমরা দুটি ডেটাবেস সিমুলেট করব: একটি Employee Database এবং একটি Department Database। এই ডেটাবেসগুলো থেকে আমরা ডেটা JDBC এর মাধ্যমে জিজ্ঞাসা করব।

1.1. Employee Database

ডেটাবেসের জন্য একটি টেবিল হতে পারে যা কর্মচারীদের তথ্য সংরক্ষণ করে:

EmployeeIDNameDepartmentID
1John Doe101
2Jane Doe102

1.2. Department Database

একটি আলাদা ডেটাবেস হতে পারে যেখানে Department তথ্য রাখা হবে:

DepartmentIDDepartmentName
101HR
102Finance

ধাপ ২: JDBC DataSource ব্যবহার করা

আমরা JDBC ব্যবহার করে Employee এবং Department ডেটাবেসের জন্য ডেটা সোর্স তৈরি করব।

2.1. DataSource Configuration

import javax.sql.DataSource;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

public class DataSourceConfig {

    public static DataSource getEmployeeDataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/employee_db");
        dataSource.setUsername("root");
        dataSource.setPassword("password");
        return dataSource;
    }

    public static DataSource getDepartmentDataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/department_db");
        dataSource.setUsername("root");
        dataSource.setPassword("password");
        return dataSource;
    }
}

এখানে আমরা Employee Database এবং Department Database এর জন্য দুটি আলাদা DataSource তৈরি করেছি।


ধাপ ৩: JasperReports Configuration

এখন, আমরা JasperReports এর মাধ্যমে দুটি আলাদা ডেটাবেস থেকে ডেটা একত্রিত করব এবং সেগুলো রিপোর্টে প্রক্রিয়া করব।

3.1. Report Design (JRXML)

আমরা Employee এবং Department এর ডেটাকে একত্রিত করতে চাই, যেখানে Employee এর জন্য EmployeeID, Name, এবং DepartmentID থাকবে এবং Department এর জন্য DepartmentID এবং DepartmentName থাকবে।

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports 
                                  http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
              name="EmployeeDepartmentReport" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">

    <!-- Employee Fields -->
    <field name="EmployeeID" class="java.lang.Integer"/>
    <field name="Name" class="java.lang.String"/>
    <field name="DepartmentID" class="java.lang.Integer"/>
    <field name="DepartmentName" class="java.lang.String"/>

    <!-- SQL Query for Employee Data -->
    <queryString>
        <![CDATA[SELECT EmployeeID, Name, DepartmentID FROM Employees]]>
    </queryString>

    <!-- SQL Query for Department Data -->
    <subDataset name="DepartmentData">
        <queryString>
            <![CDATA[SELECT DepartmentID, DepartmentName FROM Departments]]>
        </queryString>
    </subDataset>

    <detail>
        <band height="20">
            <textField>
                <reportElement x="0" y="0" width="50" height="20"/>
                <textFieldExpression><![CDATA[$F{EmployeeID}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="60" y="0" width="200" height="20"/>
                <textFieldExpression><![CDATA[$F{Name}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="270" y="0" width="100" height="20"/>
                <textFieldExpression><![CDATA[$F{DepartmentID}]]></textFieldExpression>
            </textField>

            <!-- Subreport for Department Name -->
            <subreport>
                <reportElement x="380" y="0" width="150" height="20"/>
                <subreportExpression><![CDATA["DepartmentReport.jasper"]]></subreportExpression>
                <dataSourceExpression><![CDATA[$F{DepartmentID}]]></dataSourceExpression>
            </subreport>
        </band>
    </detail>
</jasperReport>

ব্যাখ্যা:

  • Main Query: Employee ডেটাবেস থেকে কর্মচারীদের তথ্য নিয়ে আসছে।
  • Subreport (Department): Department ডেটাবেসের ডেটা subreport এর মাধ্যমে অন্তর্ভুক্ত করা হচ্ছে।

ধাপ ৪: Java কোড দিয়ে Multiple DataSources থেকে Data Fetch এবং Report Generate করা

Java কোডের মাধ্যমে আমরা দুইটি ডেটাবেস সোর্সের ডেটা ফেচ করব এবং সেই ডেটার ভিত্তিতে রিপোর্ট তৈরি করবো।

4.1. Java কোড

import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

import java.util.*;

public class MultipleDatabaseSourceReport {
    public static void main(String[] args) {
        try {
            // Employee and Department Data Fetch (Simulated)
            List<Employee> employeeList = fetchEmployeeData();
            List<Department> departmentList = fetchDepartmentData();

            // JRBeanCollectionDataSource for Employee and Department Data
            JRBeanCollectionDataSource employeeDataSource = new JRBeanCollectionDataSource(employeeList);
            JRBeanCollectionDataSource departmentDataSource = new JRBeanCollectionDataSource(departmentList);

            // Compile the main report and subreport
            JasperReport mainReport = JasperCompileManager.compileReport("EmployeeDepartmentReport.jrxml");

            // Parameters for the report
            Map<String, Object> parameters = new HashMap<>();
            parameters.put("EmployeeDataSource", employeeDataSource);
            parameters.put("DepartmentDataSource", departmentDataSource);

            // Fill the report
            JasperPrint jasperPrint = JasperFillManager.fillReport(mainReport, parameters, new JREmptyDataSource());

            // Export the report to PDF
            JasperExportManager.exportReportToPdfFile(jasperPrint, "EmployeeDepartmentReport.pdf");

            System.out.println("Report Generated Successfully!");
        } catch (JRException e) {
            e.printStackTrace();
        }
    }

    // Simulate fetching Employee data from the Employee Database
    private static List<Employee> fetchEmployeeData() {
        List<Employee> employees = new ArrayList<>();
        employees.add(new Employee(1, "John Doe", 101));
        employees.add(new Employee(2, "Jane Smith", 102));
        return employees;
    }

    // Simulate fetching Department data from the Department Database
    private static List<Department> fetchDepartmentData() {
        List<Department> departments = new ArrayList<>();
        departments.add(new Department(101, "HR"));
        departments.add(new Department(102, "Finance"));
        return departments;
    }
}

Explanation:

  1. Data Fetching: এখানে আমরা Employee এবং Department ডেটা ফেচ করেছি।
  2. JRBeanCollectionDataSource: Employee এবং Department ডেটার জন্য আলাদা আলাদা JRBeanCollectionDataSource তৈরি করা হয়েছে।
  3. Report Compilation and Filling: রিপোর্টের কম্পাইল এবং পূর্ণকরণের মাধ্যমে মূল রিপোর্ট এবং subreport এর ডেটা মাপা হয়েছে।
  4. Report Export: রিপোর্টটি PDF ফরম্যাটে এক্সপোর্ট করা হয়েছে।

  • JasperReports আপনাকে multiple database sources থেকে ডেটা ফেচ করতে এবং subreports ব্যবহার করে ডেটা একত্রিত করতে সহায়তা করে।
  • আপনি multiple datasets ব্যবহার করে একাধিক ডেটাবেস বা ডেটা সোর্স থেকে রিপোর্ট তৈরি করতে পারেন।
  • JasperReportsJRXML ফাইল তৈরি করতে এবং JDBC বা JRBeanCollectionDataSource এর মাধ্যমে ডেটা ফেচ করা যায়।

এটি একটি প্রাথমিক উদাহরণ ছিল যেখানে multiple database sources থেকে ডেটা একত্রিত করে JasperReports রিপোর্ট তৈরি করা হয়েছে।

Content added By
Promotion

Are you sure to start over?

Loading...