2011-01-11 83 views
1

我已經構建了一個使用iReport工具的Jasper Report,其中我已經註冊了兩個數據集,一個用於輪詢表中的數據,另一個用於顯示圖表。Jasper Reports:如何從Java程序傳遞多個SQL查詢

配置成功使用該工具,當我看到報告給我正確的數據。當我嘗試從一個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); 

這僅通過一個單一的查詢;我如何去傳遞多個查詢。

感謝。

回答

3

您只需將您的查詢完全存儲在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()); 
} 
+0

感謝您的輸入Costis。我最近在探索Jasper的報告,並遇到了這個問題。我會嘗試在這個領域探索更多的東西,而你的這個提示對我的進一步發展會有很大的幫助。再次感謝。 – Abdul 2011-01-12 04:31:43

相關問題