1.空数据(Empty Datasources)
就是说JRXML文件里面的内容都是静态的,直接使用
JREmptyDataSource就行了
Java代码
JasperRunManager.runReportToPdfStream(reportStream,
servletOutputStream,newHashMap(),newJREmptyDataSource());
2.Map数组(Map Datasources)
有的时候数据不一定要从数据库里面来,还有可能从Map数组里面来
成生Map[]的方法
Java代码
privateMap[]initializeMapArray()
{
//你可以把数组里面的每个map看成一个对象,就相于数据库里面的每个字段
HashMap[]reportRows=newHashMap[4];
HashMaprow1Map=newHashMap();
HashMaprow2Map=newHashMap();
HashMaprow3Map=newHashMap();
HashMaprow4Map=newHashMap();
row1Map.put("tail_num","N263Y");
row1Map.put("aircraft_serial","T-11");
row1Map.put("aircraft_model","39ROSCOETRNRRACER");
row1Map.put("engine_model","R1830SERIES");
row2Map.put("tail_num","N4087X");
row2Map.put("aircraft_serial","BA100-163");
row2Map.put("aircraft_model","BRADLEYAEROBAT");
row2Map.put("engine_model","R2800SERIES");
row3Map.put("tail_num","N43JE");
row3Map.put("aircraft_serial","HAYABUSA1");
row3Map.put("aircraft_model","NAKAJIMAKI-43IIIA");
row3Map.put("engine_model","R1830SERIES");
row4Map.put("tail_num","N912S");
row4Map.put("aircraft_serial","9973CC");
row4Map.put("aircraft_model","PA18-150");
row4Map.put("engine_model","R-1820SER");
reportRows[0]=row1Map;
reportRows[1]=row2Map;
reportRows[2]=row3Map;
reportRows[3]=row4Map;
returnreportRows;
}
生成JRMapArrayDataSource对象
Java代码
privateJRDataSourcecreateReportDataSource()
{
JRMapArrayDataSourcedataSource;
Map[]reportRows=initializeMapArray();
dataSource=newJRMapArrayDataSource(reportRows);
returndataSource;
}
Servlet里面
Java代码
JRDataSourcedataSource=createReportDataSource();
JasperRunManager.runReportToPdfStream(reportStream,
servletOutputStream,newHashMap(),dataSource);
3.Map集合
Java代码
privateJRDataSourcecreateReportDataSource()
{
JRMapCollectionDataSourcedataSource;
CollectionreportRows=initializeMapCollection();
dataSource=newJRMapCollectionDataSource(reportRows);
returndataSource;
}
privateCollectioninitializeMapCollection()
{
ArrayListreportRows=newArrayList();
HashMaprow1Map=newHashMap();
HashMaprow2Map=newHashMap();
HashMaprow3Map=newHashMap();
HashMaprow4Map=newHashMap();
row1Map.put("tail_num","N263Y");
row1Map.put("aircraft_serial","T-11");
row1Map.put("aircraft_model","39ROSCOETRNRRACER");
row1Map.put("engine_model","R1830SERIES");
row2Map.put("tail_num","N4087X");
row2Map.put("aircraft_serial","BA100-163");
row2Map.put("aircraft_model","BRADLEYAEROBAT");
row2Map.put("engine_model","R2800SERIES");
row3Map.put("tail_num","N43JE");
row3Map.put("aircraft_serial","HAYABUSA1");
row3Map.put("aircraft_model","NAKAJIMAKI-43IIIA");
row3Map.put("engine_model","R1830SERIES");
row4Map.put("tail_num","N912S");
row4Map.put("aircraft_serial","9973CC");
row4Map.put("aircraft_model","PA18-150");
row4Map.put("engine_model","R-1820SER");
reportRows.add(row1Map);
reportRows.add(row2Map);
reportRows.add(row3Map);
reportRows.add(row4Map);
returnreportRows;
}
使用
Java代码
JRDataSourcedataSource=createReportDataSource();
JasperRunManager.runReportToPdfStream(reportStream,
servletOutputStream,newHashMap(),dataSource);
4.对象数组(Java Objects as Datasources)对象JAVABEAN
Java代码
publicclassAircraftData
{
publicAircraftData(Stringtail,Stringserial,Stringmodel,
Stringengine)
{
setTailNum(tail);
setAircraftSerial(serial);
setAircraftModel(model);
setEngineModel(engine);
}
publicAircraftData()
{
}
privateStringtailNum;
privateStringaircraftSerial;
privateStringaircraftModel;
privateStringengineModel;
//setgetmethod.....
}
JRXML文件
Java代码
jasperReportPUBLIC"//JasperReports//DTDReportDesign//EN"
"/dtds/jasperreport.dtd">
调用
Java代码
privateJRDataSourcecreateReportDataSource()
{
JRBeanArrayDataSourcedataSource;
AircraftData[]reportRows=initializeBeanArray();
dataSource=newJRBeanArrayDataSource(reportRows);
returndataSource;
}
privateAircraftData[]initializeBeanArray()
{
AircraftData[]reportRows=newAircraftData[4];
reportRows[0]=newAircraftData("N263Y","T-11","39ROSCOETRNR
RACER","R1830SERIES");
reportRows[1]=newAircraftData("N4087X","BA100-163","BRADLEY
AEROBAT","R2800SERIES");
reportRows[2]=newAircraftData("N43JE","HAYABUSA1","NAKAJIMA
KI-43IIIA","R1830SERIES");
reportRows[3]=newAircraftData("N912S","9973CC","PA18-150",
"R-1820SER");
returnreportRows;
}
//最后servlet里面调用
JRDataSourcedataSource=createReportDataSource();
JasperRunManager.runReportToPdfStream(reportStream,
servletOutputStream,newHashMap(),dataSource);
5.对象集合
和对象数组基本上一样,就是最后生成的是JRBeanCollectionDataSource
Java代码
privateJRDataSourcecreateReportDataSource()
{
JRBeanCollectionDataSourcedataSource;
CollectionreportRows=initializeBeanCollection();
dataSource=newJRBeanCollectionDataSource(reportRows);
returndataSource;
}
JRDataSourcedataSource=createReportDataSource();
JasperRunManager.runReportToPdfStream(reportStream,
servletOutputStream,newHashMap(),dataSource);
6.XML数据成生报表(XML as Datasource)
Xml代码
N263Y
T-11
39ROSCOETRNRRACER
R1830SERIES
N4087X
BA100-163
BRADLEYAEROBAT
R2800SERIES
N43JE
HAYABUSA1
NAKAJIMAKI-43IIIA
R1830SERIES
N912S
9973CC
PA18-150
R-1820SER
这样获得
Java代码
JRXmlDataSourcexmlDataSource=newJRXmlDataSource(
newBufferedInputStream(getServletConfig().getServletContext()
.getResourceAsStream("/reports/AircraftData.xml")),
"/AircraftData/aircraft");
JREmptyDataSource,JRMapArrayDataSource,JRMapCollectionDataSource,JRBeanArrayDataSource,JRBeanCollectionDataSource,JRXmlDataSource
他们都implements JRDataSource
主要目地就是不从数据库里面取数据,这个方面和Hibernate结合