Ireport設定:
1. 設置paramter為JRMapCollectionDataSource
2. 子報表設定Filed為JRMapCollectionDataSource指定名稱(大小寫需相同)
Java Code:
private static BasicDataSource dataSource ;
private static JdbcTemplate jdbcTemplate ;
private static String sql1 = "SELECT LOGIN_ID, USER_NAME, USER_EMAIL FROM USER_DATA " ;
private static String sql2 = "SELECT LOGIN_ID, LOGIN_DT, LOGIN_RMK FROM LOGIN_LOG " ;
private static String mJrFile = "D:\\Jasperreport\\mainReport.jasper" ; //主報表路徑
private static String sJrFile = "D:\\Jasperreport\\" ; //子報表路徑
public static void main(String[] args) throws Exception{
//模擬專案執行
//connection 以Spring jdbcTemplate控管
dataSource = new BasicDataSource() ;
dataSource.setDriverClassName("oracle.jdbc.driver.OracleDriver") ;
dataSource.setUrl("jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.101)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=xe)(SERVER=DEDICATED)))") ;
dataSource.setUsername("zenii") ;
dataSource.setPassword("zenii") ;
dataSource.setMaxActive(30) ;
dataSource.setMaxWait(10000) ;
dataSource.setMaxIdle(10) ;
dataSource.setDefaultAutoCommit(true) ;
jdbcTemplate = new JdbcTemplate(dataSource) ;
//輸出路徑
String outputPath = "D:\\Jasperreport\\test.pdf";
try{
//get connection
Connection con = null;
try {
con = getConnection();
} catch (Exception e) {
e.printStackTrace();
}
JRPdfExporter exporter = new JRPdfExporter();
Map<String, Object> pt = new HashMap<String, Object>();
//paramter
pt.put("SUBREPORT_DIR", sJrFile);
List<DataBean> queryData1 = getData("sql1");
ArrayList<Map<String, ?>> dataAry1 = new ArrayList<Map<String, ?>>();
for(int i=0 ; i<queryData1.size() ; i++){
Map<String, Object> data = new HashMap<String, Object>();
data.put("loginId", queryData1.get(i).getLoginId());
data.put("userName", queryData1.get(i).getUserName());
data.put("userEmail", queryData1.get(i).getUserEmail());
dataAry1.add(data);
}
pt.put("DataSource1", new JRMapCollectionDataSource(dataAry1));
List<DataBean> queryData2 = getData("sql2");
ArrayList<Map<String, ?>> dataAry2 = new ArrayList<Map<String, ?>>();
for(int i=0 ; i<queryData2.size() ; i++){
Map<String, Object> data = new HashMap<String, Object>();
data.put("loginId", queryData2.get(i).getLoginId());
data.put("loginDt", queryData2.get(i).getLoginDt());
data.put("loginRmk", queryData2.get(i).getLoginRmk());
dataAry2.add(data);
}
pt.put("DataSource2", new JRMapCollectionDataSource(dataAry2));
//compiler report
JasperPrint print = JasperFillManager.fillReport(mJrFile, pt, con);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, outputPath);
exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
//export report
exporter.exportReport();
System.out.println("執行成功.");
}catch(Exception e){
System.out.println(e.toString());
}
}
public static List<DataBean> getData(String sqlName) {
StringBuffer sql = new StringBuffer();
if(sqlName.equals("sql1")){
sql.append(sql1);
}else{
sql.append(sql2);
}
return jdbcTemplate.query(sql.toString(), new BeanRowMapper<DataBean>(DataBean.class));
}
public static Connection getConnection() throws Exception{
return jdbcTemplate.getDataSource().getConnection() ;
}


沒有留言:
張貼留言