410013796724260
• Webmoney
R335386147728
Z369087728698
Настройка JDBC в iReportВ предыдущих статьях были представлены описания библиотеки JasperReport, приложения iReport Designer, структуры jrxml-шаблона и рассмотрен пример создания отчета с группировкой данных и суммированием промежуточных значений по группам. Исходные данные были представлены в виде коллекции. В данной статье рассматривается пример создания отчета с использованием данных, получаемых от сервера БД Oracle. Для этого в приложении iReport Designer необходимо будет подключить JDBC драйвер Oracle. Подключение драйвера Oracle в iReportПо умолчанию в приложении iReport Designer подключены следующие драйверы для работы c базой данных (БД):
Чтобы подключить новый драйвер необходимо открыть панель 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 Мб). Архив проекта включает все необходимые библиотеки. |