Источники данных отчетов
Источники данных представляют собой структурированный контейнер данных. При создании отчета движок JasperReports получает данные из источников данных. Данные могут быть получены из баз данных, файлов XML, массивов объектов и коллекций объектов. В главе « Заполнение отчетов» мы видели , что метод fillReportXXX () ожидает получить источник данных отчета, который необходимо заполнить, в видеnet.sf.jasperreports.engine.JRDataSource объект или java.sql.Connection (когда данные отчета находятся в реляционной базе данных).
Интерфейс JRDataSource имеет только два метода, которые следует реализовать:
public boolean next () выбрасывает JRException;
Во время заполнения отчета этот метод вызывается для объекта источника данных механизмом отчетов при итерации по данным.
общедоступный объект 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 можно получить доступ либо по их именам, либо по их индексам, отсчитываемым от нуля.
Источники данных 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 - это стандартный способ подключения пользовательских источников данных к средству дизайна. Пользовательская реализация этого интерфейса должна реализовывать следующие методы, которые позволяют создавать и удалять объекты источника данных, а также методы для перечисления доступных полей отчета внутри источника данных, если это возможно:
public boolean supportsGetFieldsOperation();
public JRField[] getFields(JasperReport report)
throws JRException, UnsupportedOperationException;
public JRDataSource create(JasperReport report) throws JRException;
public void dispose(JRDataSource dataSource) throws JRException;