JaperReports. Вычисление параметров для отчета по иерархии географических адресов

159
23 апреля 2019, 21:00

Возникла необходимость реализации следующего отчета на Jasper. На вход пользователю необходимо предложить выбрать один или несколько адресных объектов. Это могут быть населенные пункты, улицы или дома. Пользователь выбирает из предложенных текстовых значений. Параметром для SQL запроса будет соответствующий текстовому значению идентификатор или несколько идентификаторов, если выбрано несколько значений. Возникли трудности с реализацией.

Попытаюсь описать имеющуюся адресную картотеку: В базе данных oracle есть несколько видов таблиц с адресными данными. У каждого адресного объекта есть уникальный идентификатор. Пары текст-id находятся в отдельной таблице. В другой таблице есть соответствие объекта и его типа (по id можно узнать что это область, населенный пункт, улица, дом или квартира). Есть таблицы с указанием, какой объект является дочерним, а который родительским (можно узнать сколько домов на определенной улице, улиц в определенном населенном пункте и тд).

Как пытался сделать я ... Т.к. опыта работы с Jasper немного, то в БД создал таблицу, в которой каждому идентификатору дома соответствовала текстовая строка с адресом вида "Область, населенный пункт, улица, дом". Получилось около 100 000 записей. Как input control выбрал multi-select query, запрос был вида select a.id, a.adr_str from addr_list a. Как value_id выбрано поле id из запроса, как visible column выбрано поле addr_str из запроса. В таком варианте все устраивает, кроме долгого ожидания окна со вводом параметров при запуске отчета, т.е. Jasper при запуске отчета сначала 5 минут формирует весь список из 100 000 адресов. Этот момент всё портит и я не представляю, как можно исправить ситуацию. Буду признателен за подсказки.

Есть мысль запрашивать у пользователя несколько параметров, т.е. сначала предлагать выбрать область, затем населенный пункт, после улицу и дом. В этом варианте совершенно не понимаю, как можно передать выбранное в одном запросе значение в другой запрос, чтоб вычислить идентификатор или несколько идентифкаторов, которые уже будут параметрами SQL запроса.

Answer 1

При создании контрола предлагается ввести его имя, и это значение будет в дальнейшем являться его resource_id. В дальнейшем имя можно изменять, а вот resource_id остается постоянным и этот resource_id обязательно должен совпадать с именем параметра в SQL запросе. В моем случае они были разные.

READ ALSO
Вопрос по строкам в Java

Вопрос по строкам в Java

Пример кода:

161
Как создавать кнопки динамически?

Как создавать кнопки динамически?

Подскажите как создать кнопки в jPanel при нажатии другой кнопки(Нажимаю кнопку, и на jPanel создается новая кнопка jButton1, нажимаю еще раз jButton2, и т

170
Что я делаю не так? (Архиватор)

Что я делаю не так? (Архиватор)

Учу Java, решил написать что-то типа архиватораСобственно в output вводим путь и название архива, типа : C://Folder/arhiv

143