Учебники

Источники данных отчета

Источники данных – это структурированный контейнер данных. При создании отчета механизм JasperReports получает данные из источников данных. Данные могут быть получены из баз данных, файлов XML, массивов объектов и коллекции объектов. Мы видели в главе Заполнение отчетов , метод fillReportXXX () ожидает получить источник данных отчета, который должен заполнить, в виде объекта net.sf.jasperreports.engine.JRDataSource или java.sql.Connection ( когда данные отчета находятся в реляционной базе данных).

Интерфейс JRDataSource имеет только два метода, которые должны быть реализованы:

  • public boolean next () выбрасывает JRException;

    • Во время заполнения отчета этот метод вызывается для объекта источника данных механизмом отчетов при итерации по данным.

  • public Object getFieldValue (JRField jrField) генерирует JRException;

    • Этот метод предоставляет значение для каждого поля отчета в текущей записи источника данных.

public boolean next () выбрасывает JRException;

Во время заполнения отчета этот метод вызывается для объекта источника данных механизмом отчетов при итерации по данным.

public Object getFieldValue (JRField jrField) генерирует JRException;

Этот метод предоставляет значение для каждого поля отчета в текущей записи источника данных.

Единственный способ получить данные из источника данных – использовать поля отчета. Существует несколько реализаций по умолчанию интерфейса JRDataSource, в зависимости от способа получения записей в источнике данных.

Реализация источников данных

В таблице, приведенной ниже, обобщены источники данных и классы их реализации.

Источник данных Класс реализации
JDBC net.sf.jasperreports.engine.JRResultSetDataSource
JavaBean net.sf.jasperreports.engine.data.JRBeanCollectionDataSource, net.sf.jasperreports.engine.data.JRBeanArrayDataSource
Карта на основе net.sf.jasperreports.engine.data.JRMapArrayDataSource, net.sf.jasperreports.engine.data.JRMapCollectionDataSource
TableModel net.sf.jasperreports.engine.data.JRTableModelDataSource
XML net.sf.jasperreports.engine.data.JRXmlDataSource
CSV net.sf.jasperreports.engine.data.JRCsvDataSource
XLS net.sf.jasperreports.engine.data.JRXlsDataSource
пустой net.sf.jasperreports.engine.JREmptyDataSource

Источники данных JDBC

Класс JRResultSetDataSource создает объект java.sql.ResultSet . Это наиболее часто используемые реализации источника данных, когда данные отчета извлекаются из реляционной базы данных. Если вместо этого в движок передается java.sql.Connection , он сначала выполняет связанный запрос и сохраняет возвращенный объект java.sql.ResultSet в экземпляре JRResultSetDataSource.

Источники данных JavaBean

Классы JRBeanArrayDataSource и JRBeanCollectionDataSource представляют реализации, которые могут обернуть массивы и коллекции объектов JavaBean. Каждый объект в массиве или коллекции будет рассматриваться как одна запись в этом типе источника данных. Отображение между конкретным свойством JavaBean и соответствующим полем отчета выполняется в соответствии с соглашениями об именах. Имя поля отчета должно совпадать с именем свойства JavaBean, как указано в спецификациях JavaBeans.

Во всех примерах этого урока мы использовали JRBeanCollectionDataSource.

Источники данных на основе карт

Классы реализации JRMapArrayDataSource и JRMapCollectionDataSource полезны, если родительское приложение уже хранит данные отчетов, доступные в памяти, как объекты java.util.Map . Каждый объект Map в обернутом массиве или коллекции считается виртуальной записью в источнике данных, и значение каждого поля отчета извлекается из карты с использованием поля отчета, названного ключом.

TableModel Источники данных

Во многих клиентских приложениях данные отображаются в табличном формате. Общее требование во многих приложениях – разрешить пользователю печатать этот табличный формат в виде отчета. Класс реализации JRTableModelDataSource делает задачу генерации отчетов из табличного формата тривиальной для приложений Swing. Этот класс оборачивает объект javax.swing.table.TableModel. Столбцы в обернутом объекте TableModel могут быть доступны либо по их именам, либо по их индексам на основе 0.

Источники данных XML

Класс JRXmlDataSource является реализацией источника данных, основанной на DOM, которая использует выражения XPath для выбора данных из документа XML. Записи в источнике данных XML представлены элементами узла, выбранными с помощью выражения XPath. Значения полей извлекаются из каждой записи с использованием выражения XPath, предоставленного описанием поля (элемент <fieldDescription> в JRXML).

XPath – это язык, используемый для навигации по атрибутам и элементам XML-документа. Дополнительную информацию о XPath можно найти по адресу http://www.w3.org/TR/xpath.

Источники данных CSV

JRCsvDataSource представляет реализацию для источников данных, которые извлекают их данные из структурированных текстовых файлов; обычно CSV. Значения полей извлекаются с использованием их индекса столбца.

Источники данных XLS

JRXlsDataSource представляет реализацию для источников данных, которые получают их данные из документов Excel. Отображение полей отчета для этой реализации источника данных также основано на индексе столбца поля.

Пустые источники данных

Класс JREmptyDataSource имитирует источник данных с заданным количеством виртуальных пустых записей внутри. Он используется инструментами пользовательского интерфейса для предоставления основных функций предварительного просмотра отчетов, либо в специальных шаблонах отчетов, либо для целей тестирования и отладки.

Перезаписываемые источники данных

Net.sf.jasperreports.engine.JRRewindableDataSource расширяет базовый интерфейс JRDataSource . Он добавляет только один метод, называемый moveFirst (), к интерфейсу. Этот метод предназначен для перемещения курсора на первый элемент в источнике данных.

Перезаписываемые источники данных полезны при работе с вложенными отчетами, помещенными в полосу, которая не может быть разделена из-за параметра isSplitAllowed = “false”, и на текущей странице недостаточно места для отображения вложенного отчета.

Все вышеперечисленные реализации источника данных можно перематывать, за исключением JRResultSetDataSource , поскольку он не поддерживает перемещение указателя записи назад. Это создает проблему, только если этот источник данных используется вручную, чтобы обернуть java.sql.ResultSet перед передачей его в подотчет. Нет проблем, если запрос SQL находится в шаблоне подотчета, так как механизм выполнит его снова при перезапуске подотчета на следующей странице.

Поставщики источников данных

Библиотека JasperReports имеет интерфейс net.sf.jasperreports.engine.JRDataSourceProvider . Это помогает в создании и удалении объектов источника данных. При создании шаблона отчета с использованием инструментов с графическим интерфейсом необходим специальный инструмент для настройки источника данных отчета. JRDataSourceProvider – это стандартный способ подключения пользовательских источников данных в инструмент проектирования. Пользовательская реализация этого интерфейса должна реализовывать следующие методы, которые позволяют создавать и утилизировать объекты источника данных, а также методы для перечисления доступных полей отчета внутри источника данных, если это возможно –