Ireport 連接數據庫 javabean 使用參數的簡單例子

1.連接數據庫首先測試連接得數據庫後 在如下圖中寫上自己要調用的sql,這裏是沒有參數的可能圖片上傳不得- -,做好模板後,就是到jsp中的代碼了,這裏就直接複製出來了。方便自己以後快速找到

<%@ page contentType="text/html;charset=utf-8"%><%@ page import="net.sf.jasperreports.engine.*"%><%@ page import="java.util.*"%><%@ page import="java.io.*"%><%@ page import="java.sql.*"%>This is my JSP page.

<%//報表編譯之後生成的.jasper文件的存放位置 File reportFile = new File(this.getServletContext().getRealPath("report1.jasper"));Class.forName("com.mysql.jdbc.Driver");String url = "jdbc:mysql://localhost/bg2?useUnicode=true&characterEncoding=utf-8";String user = "root";String password = "123456";Map parameters = new HashMap();Connection conn = DriverManager.getConnection(url, user, password);byte[] bytes = JasperRunManager.runReportToPdf(reportFile.getPath(), parameters, conn);//設置編碼格式response.setContentType("application/pdf");response.setContentLength(bytes.length);//ServletOutputStream outStream = response.getOutputStream();outStream.write(bytes, 0, bytes.length);outStream.flush();outStream.close();out.clear();out = pageContext.pushBody();%>下面是生成HTML的代碼 ,製作模板和上面的類似

<%@ page contentType="text/html;charset=utf-8"%><%@ page import="net.sf.jasperreports.engine.*"%><%@ page import="java.util.*"%><%@ page import="java.io.*"%><%@ page import="java.sql.*"%>This is my JSP page.

<%String ctxpath = request.getContextPath();

Class.forName("com.mysql.jdbc.Driver");

String url = "jdbc:mysql://localhost/bg2?useUnicode=true&characterEncoding=utf-8";String user = "root";

String password = "123456";

Connection conn = DriverManager.getConnection(url, user, password);

//ireport生成的.jasper文件的存放位置,這裏爲了方便放置在根目錄下面

 File reportFile = new File(this.getServletContext().getRealPath("/report1.jasper"));Map parameters = new HashMap();

//map負責放入參數 在報表中顯示的 ,這裏沒用用到

try {

//執行報表程序

 JasperRunManager.runReportToHtmlFile(reportFile.getPath(),parameters, conn);

//自動生成跳轉,,這裏目前生成的文件需要和ireport末班名稱一樣 暫時不知道如何修改

response.sendRedirect(ctxpath + "/report1.html");} catch (Exception e) {System.out.println(e.getMessage());} finally {try {conn.close();} catch (Exception ex) {System.out.println(ex.getMessage());}}%>

2:javabean 的連接使用 首先創建ProductBean類package ireport;public class ProductBean{ private String productName; public String getProductName() { return productName; } public void setProductName(String productName) { this.productName = productName; }}編譯之後,在創建模板的時候需要在Ireport的ireport Datasource 那裏選着 javabeans set datasource ,然後再工具->選項- > classpath 添加你編譯後的ProductBean類的路徑,例如我的是 Z_IreportDemo\WebRoot\WEB-INF\classes。然後再Ireport query 面板中選着javabean datasource,然後再框框中輸入你的類名 ,例如我的是:ireport.ProductBean ,然後點擊read attributes 按鈕 會出現類的對應的屬性變量,點擊預覽,把編譯好的模板文件放到項目中。下面是一些實現代碼<%@ page contentType="text/html;charset=utf-8"%><%@ page import="net.sf.jasperreports.engine.*"%><%@ page import="java.util.*"%><%@ page import="java.io.*"%><%@ page import="java.sql.*"%><%@ page import="ireport.ProductBean"%><%@ page import="net.sf.jasperreports.engine.data.*"%><%@ page import="net.sf.jasperreports.engine.util.*"%><%@ page import="java.net.*"%><%@ page import="net.sf.jasperreports.engine.export.*"%>This is my JSP page.

<% try { //生成測試數據 ArrayList data = new ArrayList(); for(int i = 1; i <= 100; i++) { ProductBean bean = new ProductBean(); bean.setProductName("Product " + i); data.add(bean); } // JRDataSource dataSource = new JRBeanCollectionDataSource(data); //獲取報表模板文件 String root_path = this.getServletContext().getRealPath("/report10.jasper"); // root_path = root_path.replace('/', '/'); String reportFilePath = root_path;// + "WEB-INF/classes/lld/test/ireport/report_2.jasper"; System.out.println("jasper file is " + reportFilePath); //生成JasperPrint JasperReport report = (JasperReport)JRLoader.loadObject(reportFilePath); JasperPrint jasperPrint = JasperFillManager.fillReport(report, null, dataSource); //設定輸出格式 OutputStream ouputStream = response.getOutputStream(); response.setContentType("application/pdf"); response.setCharacterEncoding("UTF-8"); response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode("PDF報表", "UTF-8") + ".pdf"); // 使用JRPdfExproter導出器導出pdf JRPdfExporter exporter = new JRPdfExporter(); // 設置JasperPrintList exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream); exporter.exportReport(); System.out.println("ok......"); out = pageContext.pushBody(); ouputStream.close(); } catch (Exception e) { e.printStackTrace(); } %>

3:使用參數,使用參數的方法,主要是在sql中可能需要用到一些條件,然後由開發者,在外部動態的傳入參數然後改變查詢出來的結果例如我使用下面這句:select * from user where username in ($P{username}) ,這裏的$P{username}中的username需要在ireport中自己創建的,如果對ireport左邊的那些組件還不是很瞭解的建議去網上找找詳細的介紹教程看看。當模板編譯好後,可以用下面的代碼實現

<%@ page contentType="text/html;charset=utf-8"%><%@ page import="net.sf.jasperreports.engine.*"%><%@ page import="java.util.*"%><%@ page import="java.io.*"%><%@ page import="java.sql.*"%><%@ page import="ireport.ProductBean"%><%@ page import="net.sf.jasperreports.engine.data.*"%><%@ page import="net.sf.jasperreports.engine.util.*"%><%@ page import="java.net.*"%><%@ page import="net.sf.jasperreports.engine.export.*"%>

This is my JSP page.
<%String username = "aaaaaaa";File reportFile = new File(this.getServletContext().getRealPath("test.jasper"));//Class.forName("com.mysql.jdbc.Driver");String url = "jdbc:mysql://localhost/bg2?useUnicode=true&characterEncoding=utf-8";String user = "root";String password = "123456";Connection conn = DriverManager.getConnection(url, user, password);Map parameters = new HashMap();parameters.put("username", username);////JRDataSource dataSource = new JRBeanCollectionDataSource(data);//獲取報表模板文件String root_path = this.getServletContext().getRealPath("/test.jasper");// root_path = root_path.replace('/', '/');String reportFilePath = root_path;// + "WEB-INF/classes/lld/test/ireport/report_2.jasper";System.out.println("jasper file is " + reportFilePath);// JasperPrint jasperPrint = JasperFillManager.fillReport(reportFile.getPath(),parameters,conn);byte[] bytes = JasperRunManager.runReportToPdf(reportFile.getPath(), parameters, conn);//設置編碼格式response.setContentType("application/pdf");response.setContentLength(bytes.length);//ServletOutputStream outStream = response.getOutputStream();outStream.write(bytes, 0, bytes.length);outStream.flush();outStream.close();out.clear();out = pageContext.pushBody();conn.close();%>

簡單的例子 每天進步一點點

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章