Настройка JDBC в iReport

В предыдущих статьях были представлены описания библиотеки JasperReport, приложения iReport Designer, структуры jrxml-шаблона и рассмотрен пример создания отчета с группировкой данных и суммированием промежуточных значений по группам. Исходные данные были представлены в виде коллекции. В данной статье рассматривается пример создания отчета с использованием данных, получаемых от сервера БД Oracle. Для этого в приложении iReport Designer необходимо будет подключить JDBC драйвер Oracle.

Подключение драйвера Oracle в iReport

По умолчанию в приложении iReport Designer подключены следующие драйверы для работы c базой данных (БД):

НаименованиеДрайвер
JDBC-ODBC Bridge sun.jdbc.odbc.JdbcOdbcDriver
MySQL (Connector/J driver) com.mysql.jdbc.Driver
PostgreSQL org.postgresql.Driver

Чтобы подключить новый драйвер необходимо открыть панель Services (пункт меню Window/Services), выбрать элемент записи «Drivers» и в контекстном меню, вызываемом нажатием правой клавиши мыши, выбрать «New Driver ...», как это представлено на следующем скриншоте.

В результате выполненных действий iReport откроет окно выбора нового драйвера, где следует определить его местоположение (кнопка Add...) и выбрать наименование Name.

В приложении iReport был установлен драйвер для работы с сервером Oracle DataBase 10g Express Edition.

Подключение к серверу БД, Database Connection

Для подключения к серверу БД необходимо создать «Database Connection». Для этого выделяем в панели «Services» запись "Databases", вызываем контекстное меню и выбираем «New Connection».

iReport откроект окно создания нового подключения «Database Connection». В зависимости от выбранного списка параметров (Field Entry или Direct URL Entry) необходимо определить параметры подключения : драйвер, логин, пароль и строку подключения JDBC URL или компьютер, порт и SID.

После создания «Database Connection» можно подключиться к серверу БД и увидеть таблицы, представления и процедуры в базе данных.

Примечание : созданное подключение позволяет просматривать только структуру БД и содержимое таблиц в панели Services. Чтобы сформировать отчет в приложении iReport с использованием БД необходимо создать именованное подключение. Для этого следует нажать кнопку «Report Datasource» (см. следующий скриншот) и в открывшемся диалоговом окне «по образцу и подобию» выше описанному создать именованное подключение.

Таблица базы данных

В качестве сервера БД в рассматриваемом примере используется Oracle DataBase 10g Express Edition, описание подключения которого в приложении iReport было представлено выше. Если необходимо использовать версию Oracle DataBase Enterprise Edition, то нужно будет подключить другой драйвер JDBC как в iReport, так и в java-приложении, где будет использоваться jrxml-шаблон.

Создадим в БД таблицу сотрудников EMPLOYEES и добавим в нее несколько записей :

CREATE TABLE EMPLOYEES ( 
    ID      INTEGER PRIMARY KEY, 
    FNAME   VARCHAR(32) NOT NULL, 
    NAME    VARCHAR(32) NOT NULL, 
    POST    VARCHAR(64) NOT NULL,
    SALARY  NUMBER(9, 2) 
);

insert into employees (id, name, fname, post, salary) 
        values (1, 'Остап', 'Бендер', 'Директор', 30000.0);
insert into employees (id, name, fname, post, salary) 
        values (2, 'Киса', 'Воробьянинов', 'Предводитель', 28000.0);
insert into employees (id, name, fname, post, salary)
        values (3, 'Отец', 'Федор', 'Священнослужитель', 24000.0);
insert into employees (id, name, fname, post, salary)
        values (4, 'Александр', 'Корейко', 'Менеджер', 16000.0);
insert into employees (id, name, fname, post, salary)
        values (5, 'Зося', 'Синицкая', 'Секретарь', 20000.0);
insert into employees (id, name, fname, post, salary)
        values (6, 'Шура', 'Балаганов', 'Специалист', 18000.0);
insert into employees (id, name, fname, post, salary)
        values (7, 'Михаил', 'Паниковский', 'Помощник', 18000.0);
insert into employees (id, name, fname, post, salary)
        values (8, 'Адам', 'Козлевич', 'Водитель', 15000.0);

Таблица EMPLOYEES с набором записей в БД Oracle является основным источником информации для создания отчета.

Описание jrxml-шаблона

Создаем jrxml-шаблон report-ds, в котором определяем параметр DATE (java.util.Date) и список полей id, name, fname, post, salary. Описание процесса создания нового jrxml-шаблона с использованием приложения iReport Designer (подключение секций, создание списков полей, параметров и переменных) представлено здесь.

Для получения данных от сервера Oracle необходимо в панели свойств шаблона report-ds определить «Query Text». В тексте SQL-запроса должны присутствовать наименования из списка полей (id, name, fname, post, salary) :

select id, name, fname, post, salary from employees

На следующем скриншоте представлена панель свойств jrxml-шаблона :

Настраиваем интерфейс jrxml-шаблона, чтобы он приобрел следующий вид :

Отчет можно сформировать и открыть в iReport. Для этого необходимо выбрать соответствующее именованное подключение в панели инструментов и перейти в режим просмотра отчета «Preview». Страница созданного отчета представлена на следующем скриншоте.

Формирование отчета в java-приложении

После того, как отчет jrxml-шаблон создан, необходимо его подключить в java-приложении. На следующем скриншоте представлен проект приложения формирования отчета в IDE Eclipse. Проект включает два программных модуля OracleDAO.java, ReportCreater.java. OracleDAO.java используется для создания подключения Connection к серверу БД с использованием JDBC. ReportCreater.java формирует отчет report.pdf на основе шаблона report-ds.jrxml.

В директории lib размещаются все необходимые библиотеки, используемые для создания подключения к серверу Oracle и формирования отчета. Не включенная в CLASSPATH библиотека ojdbc7.jar может быть использована при подключении к серверу Oracle Enterprise Edition.

Листинг класса создания отчета ReportCreater.java

При формировании отчета в java-приложении с использованием jrxml-шаблона необходимо создать подключение к серверу БД и передать его вместе с шаблоном и параметрами в метод fillReport модуля JasperFillManager. Код модуля ReportCreater.java простой и не требует особых комментариев.

import java.io.File;

import java.util.Date;
import java.util.Map;
import java.util.HashMap;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperCompileManager;

public class ReportCreater
{
    private final String PROJECT_PATH   = "D:\\examples\\report-ds";
    private final String REPORT_pdf     = "\\report.pdf";
    private final String REPORT_pattern = "\\jrxml\\report-ds.jrxml";

    public void create() throws JRException {
        // Параметры
        Map<String, Object> parameters
        parameters = new HashMap<String, Object>();
        parameters.put("DATE", new Date());

        OracleDAO ora = new OracleDAO();

        JasperDesign jasperDesign;
        JasperReport jasperReport;
        JasperPrint  jasperPrint ;

        String path = PROJECT_PATH + REPORT_pattern;
        File reportPattern = new File(path);

        jasperDesign = JRXmlLoader.load(reportPattern);
        jasperReport = JasperCompileManager.compileReport(jasperDesign);
        jasperPrint  = JasperFillManager.fillReport(jasperReport,
                                                    parameters,
                                                    ora.connection);
        path = PROJECT_PATH + REPORT_pdf;
        JasperExportManager.exportReportToPdfFile(jasperPrint, path);
        ora.closeConnection();
    }

    public static void main(String[] args) {
        System.out.println("Начало генерации отчёта");
        try {
            new ReportCreater().create();
            System.out.println("Генерация отчёта завершена");
        } catch (Exception e) {
            System.err.println("Во время генерации возникла ошибка: " + e);
        }
    }
}

Листинг OracleDAO.java

Модуль OracleDAO.java, как было отмечено выше, предназначен для создания подключения Connection к серверу Oracle. Вам необходимо определиться с параметрами подключения (URL_host, SCHEMA_oracle, login и password), чтобы пример сработал.

import java.sql.SQLException;
import java.sql.DriverManager;

import java.util.Properties;

import oracle.jdbc.OracleConnection;

public class OracleDAO 
{
    private final String DRIVER_oracle  = "oracle.jdbc.OracleDriver";
    private final String URL_oracle     = "jdbc:oracle:thin:@%s:%d:%s";

    private final String URL_host       = "localhost";
    private final int    PORT_oracle    = 1521;

    private final String SCHEMA_oracle  = "XE";
    private final String login          = "...";
    private final String password       = "...";
    public  OracleConnection connection = null;
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    public OracleDAO()
    {
        createConnection();
    }
    public void createConnection()
    {
        try {
            // Регистрация драйвера
            Class.forName(DRIVER_oracle).newInstance();
            // Определение свойств подключения Connection
            Properties properties = new Properties();
            properties.setProperty("password"         , password);
            properties.setProperty("user"             , login   );
            properties.setProperty("useUnicode"       , "true"  );
            properties.setProperty("characterEncoding", "utf8"  );

            String url = String.format(URL_oracle, URL_host, 
                                       PORT_oracle, SCHEMA_oracle);
            connection = (OracleConnection)
                        DriverManager.getConnection(url, properties);
            connection.setAutoCommit(false);
        } catch (InstantiationException e) {
        } catch (IllegalAccessException e) {
        } catch (ClassNotFoundException e) {
        } catch (SQLException           e) {
            connection = null;
        }
    };
    public void closeConnection()
    {
        if(connection != null){
            try {
                connection.close();
            } catch(SQLException e){
                System.err.println(e.getMessage());
            }
        }
    }
}

Скачать пример

Исходные коды примера создания JasperReports отчета с использованием базы данных Oracle можно скачать здесь (14.5 Мб). Архив проекта включает все необходимые библиотеки.

  Рейтинг@Mail.ru