2016-03-16 61 views
0

我有代碼的JasperReport:從查詢檢索第二個結果與參數的JasperReport

 int id = 1; 
     String sql = "SELECT * FROM invoices where id = '"+ id + "'"; 
     InputStream source = getClass().getClassLoader().getResourceAsStream("tre/"+ reportName + ".jrxml"); 
     JasperDesign jd = JRXmlLoader.load(source); 
     JRDesignQuery newQuery = new JRDesignQuery(); 
     newQuery.setText(sql); 
     jd.setQuery(newQuery); 
     JasperReport jr = JasperCompileManager.compileReport(jd); 
     JasperPrint jp = JasperFillManager.fillReport(jr, null, ConnectionToDb.connectDb()); 
     JasperViewer.viewReport(jp); 

到目前爲止好。這使我在報告中顯示當前發票的行數。現在我怎麼可以在JasperReport中添加Fields,它將包含來自兩個公司的再次使用SQL的發票的詳細信息,並且查詢來自方法中的java代碼? 比方說,這個查詢:

 String company = textField.getText(); 
     String sql = "SELECT * FROM companies where name = '"+ company + "'"; 

這裏是JasperReport的部分:

<queryString> 
    <![CDATA[select * from invoices]]> 
</queryString> 
<field name="Name" class="java.lang.Object"/> 
<field name="Type" class="java.lang.Object"/> 
<field name="Quantity" class="java.lang.Object"/> 
<field name="Price" class="java.lang.Object"/> 
<field name="Info" class="java.lang.Object"/> 

附: 參數與模式:本報告中的查詢我與newQuery.setText(sql);

+0

的[如何添加特設數據庫內容到文本字段(HTTP://計算器.com/q/36019481/876298)的帖子可以幫助你 –

+0

很好的例子,但還是不明白,這怎麼與java交流?我正在使用JavaSwing。當我從JFrame中獲得一些值時,這個值將成爲查詢報表中的參數: '!![CDATA [SELECT ID,ADDRESSID,TOTAL FROM DOCUMENT WHERE ADDRESSID = $ P {value} ORDER BY ADDRESSID]]> ' – Rumen

+1

您可以通過參數映射將參數傳遞給報告。你正在傳遞* null *而不是* Map * –

回答

0
Map<String, Object> param = new HashMap<String, Object>(); 
......   
JasperPrint jp = JasperFillManager.fillReport(jr, param, ConnectionToDb.connectDb()); 

然後在JasperReport的覆蓋它$P{nameCompany}

相關問題