Создание отчета с использованием соединения JDBC без сущностей через DynamicJasper - PullRequest
0 голосов
/ 05 мая 2019

При создании отчетов с использованием DynamicJasper 5.1.1 Я получаю набор результатов из источника данных, мой PDF-файл пуст после генерации, не уверен, почему мой PDF-файл становится пустым.

Iвзял код ссылки от здесь .Ниже приведен мой код:

import ar.com.fdvs.dj.core.DynamicJasperHelper;
import ar.com.fdvs.dj.core.layout.ClassicLayoutManager;
import ar.com.fdvs.dj.domain.DynamicReport;
import ar.com.fdvs.dj.domain.builders.FastReportBuilder;
import net.sf.jasperreports.engine.*;

import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class DynamicJDBCReportHandler {

    static String username = "mnbfmwemf";
    static String password = "fwfwfwf";

    public static void main(String[] args) {
        DynamicJDBCReportHandler drh = new DynamicJDBCReportHandler();
        drh.getResultSet();
    }

    public Map<String, Object> getResultSet() {
        Connection connection = null;
        Statement statement = null;
        JasperReport jreport;
        JasperPrint jprint;
        ArrayList<Object> list = new ArrayList<Object>();
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");

            connection = DriverManager.getConnection("jdbc:oracle:thin:@wfwfwf:1521:fwefw", username, password);

            statement = connection.createStatement();

            String query = "SELECT * FROM USER ORDER BY CREATE_DATE";
            ResultSet rs = statement.executeQuery(query);

            JRResultSetDataSource dataSource = new JRResultSetDataSource(rs); // Here associate the resultSet with JasperReport
            FastReportBuilder drb = new FastReportBuilder();
            DynamicReport report = drb.build();

            try {
                jreport = DynamicJasperHelper.generateJasperReport(report, new ClassicLayoutManager(), new HashMap());
                jprint = JasperFillManager.fillReport(jreport, new HashMap<>(), dataSource);
                JasperExportManager.exportReportToPdfFile(jprint, "/report.pdf");
                rs.close();
            } catch (JRException e) {
                e.printStackTrace();
            }
        }catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (statement != null) {
                    statement.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }

            try {
                if (connection != null) {
                    connection.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return  null;
    }
}

Я не хочу создавать файл .jrxm или .jasper , я уверен, что кто-то должен был это сделать, еслиВы могли бы указать мне, когда я делаю неправильно, очень ценю вашу помощь.

1 Ответ

0 голосов
/ 05 мая 2019

Что не так?

Вы забыли объявить структуру отчета с помощью FastReportBuilder . Вы создали пустой отчет с этой строкой кода: DynamicReport report = drb.build();.

Правильный пример:

public void buildReport() {
    String query = "SELECT * FROM my_table";
    try (Connection connection = DriverManager.getConnection(getConnectionString(), user, password);
         Statement statement = connection.createStatement();
         ResultSet rs = statement.executeQuery(query)) {

        JRResultSetDataSource dataSource = new JRResultSetDataSource(rs);
        DynamicReport report = new FastReportBuilder().addColumn("Column1", "column_1", String.class.getName(), 120).setTitle("Sample report").build();

        JasperReport jasperReport = DynamicJasperHelper.generateJasperReport(report, new ClassicLayoutManager(), new HashMap());
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, new HashMap<>(), dataSource);
        JasperExportManager.exportReportToPdfFile(jasperPrint, "./report.pdf");
    } catch (SQLException | JRException | ClassNotFoundException e) {
        log.error("Failed to build report", e);
    }
}

Я добавил столбец Столбец1 и добавил заголовок отчета с этой строкой кода:

DynamicReport report = new FastReportBuilder().addColumn("Column1", "column_1", String.class.getName(), 120).setTitle("Sample report").build();

Дополнительная информация:

Руководство по началу работы с DynamicJasper

Тесты DynamicJasper

...