Отчеты Jasper: Как передать несколько SQL-запросов из Java-программы - PullRequest
1 голос
/ 11 января 2011

Я построил отчет Jasper с помощью инструмента iReport, в котором я зарегистрировал два набора данных: один для получения данных в таблице, а другой для отображения диаграммы.

Конфигурация прошла успешно с использованием инструмента, и когда я вижу отчет, он дает мне правильные данные. Однако когда я пытаюсь вызвать запросы из Java-программы, я теряюсь. Как мне справиться с этим? Я могу передать только один запрос с примером исходного кода, который у меня есть в качестве моей программы.

Пример исходного кода, который я использую:

            Connection conn = getConnection("172.16.88.171", "1522", "orcl", "audi", "audi");
        System.out.println("Got jdbc connection...");
        Statement stmt = conn.createStatement();
        ResultSet rset = stmt.executeQuery("SELECT DB_USER, OS_USER, USERHOST, STATEMENT_TYPE, SQL_TEXT FROM DBA_FGA_AUDIT_TRAIL");


        InputStream input = new FileInputStream(new File("E:\\jasper_reports\\sampleADPTemplate_chart.jrxml"));
        JasperDesign design = JRXmlLoader.load(input);
        JasperReport report = JasperCompileManager.compileReport(design);

        JasperPrint print = JasperFillManager.fillReport(report, new HashMap(), conn);

        OutputStream output = new FileOutputStream(new File("E:\\jasper_reports\\JasperReporttoPDF.pdf"));
        JasperExportManager.exportReportToPdfStream(print, output);

Это передает только один запрос; Как мне пройти несколько запросов.

Спасибо.

1 Ответ

3 голосов
/ 11 января 2011

Вам нужно только хранить ваши запросы полностью в вашем файле iReport jrxml. Чтобы сделать ваш отчет гибким, используйте параметры. Таким образом, вы позволяете пользователю определять необходимые значения во время выполнения.

Здесь вы можете увидеть пример, который получает два значения из двух комбинированных блоков, добавляет их в HashMap и передает карту в iReport. Эти параметры, для этого примера «storeName» и «actionCode», используются для указания значений для запроса, который хранится в iReport.

Вы можете иметь несколько запросов внутри подотчетов.

try {

    String shopName = jComboBox1.getSelectedItem().toString();
    String actionCode = jComboBox2.getSelectedItem().toString();

    HashMap<String, Object> map = new HashMap<String, Object>();
    map.put("storeName", shopName);
    map.put("actionCode", actionCode);

    URL reportFileURL = getClass().getResource("../ireps/AccessCounter.jrxml");
    File reportFile = new File(reportFileURL.toURI());
    JasperDesign jasperDesign = JRXmlLoader.load(reportFile);
    JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, map, con);

    JasperViewer jv = new JasperViewer(jasperPrint);
    JDialog viewer = new JDialog(this, "Batch Report", true);
    viewer.setBounds(jv.getBounds());
    viewer.getContentPane().add(jv.getContentPane());
    viewer.setResizable(true);
    viewer.setIconImage(jv.getIconImage());
    viewer.setVisible(true);

} catch (JRException exc) {
   System.out.println(exc.getMessage());
} catch (URISyntaxException exs) {
   System.out.println(exs.getMessage());
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...