使用Jasper生成JasperPrint方式有多种,现与大家分享如下,详见代码
private JasperPrint createJasperPrint(String createFun,Map map){
//默认采用sql方式进行
if (createFun.equals("sql")){
PreparedStatement pStmt = null;
ResultSet rs = null;
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
try {
pStmt = session.connection().prepareStatement(this.getJasperSQL());
rs = pStmt.executeQuery();
} catch (HibernateException e) {
log.error("createJasperPrint is error.....");
e.printStackTrace();
} catch (SQLException e) {
log.error("createJasperPrint is error.....");
e.printStackTrace();
}
JRResultSetDataSource ds = new JRResultSetDataSource(rs);
try {
return JasperFillManager.fillReport(jasperReport, map,ds);
} catch (JRException e) {
log.error("createJasperPrint is error.....");
e.printStackTrace();
}finally{
try {
session.close();
} catch (HibernateException ex) {
log.error("createJasperPrint session close is error.....");
}
}
}else if(createFun.equals("javabean")){
JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(this.jasperList);
try {
return JasperFillManager.fillReport(jasperReport, map,dataSource);
} catch (JRException e) {
log.error("createJasperPrint session close is error.....");
e.printStackTrace();
}
}else if(createFun.equals("hql")){
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
JRHibernateQueryExecuterFactory jrh_qef = new JRHibernateQueryExecuterFactory();
map.put(JRHibernateQueryExecuterFactory.PARAMETER_HIBERNATE_SESSION, session);
JRDesignQuery query = new JRDesignQuery();
query.setText(this.getJasperHQL());
JRDesignDataset jasperDataset = new JRDesignDataset(new Boolean(true));
jasperDataset.setQuery(query);
JRHibernateQueryExecuter jrh_qe;
try {
jrh_qe = (JRHibernateQueryExecuter) jrh_qef.createQueryExecuter(jasperDataset, map);
JRHibernateListDataSource ds = new JRHibernateListDataSource(jrh_qe, new Boolean(true), 10);
return JasperFillManager.fillReport(jasperReport, map,ds);
} catch (JRException e) {
log.error("createJasperPrint session close is error.....");
e.printStackTrace();
}
}
return null;
}
注:其中hql方式目前尚未测试通过,暂时没时间研究。使用javabean方式比较方便。