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 Мб). Архив проекта включает все необходимые библиотеки. |
