標籤:jasperreport   ireport4.6.0   
列舉一下需要的資源:
1、mySql資料庫安裝好的
2、iReport+jasperreport配置好
3、我用的是Myeclipse,MySQL的驅動jar包不要忘記
第一部分:建立資料庫連接
package com.mySqlsource;import java.sql.Connection;public class Database {private String dbUrl =  "jdbc:mysql://localhost:3306/bookdb";  private String dbUser="root";  private String dbPwd="123456";  public Database () throws Exception{     Class.forName("com.mysql.jdbc.Driver");  }  public Connection getConnection()throws Exception{      return java.sql.DriverManager.getConnection(dbUrl,dbUser,dbPwd);  }  public void closeConnection(Connection con){    try{        if(con!=null) con.close();      }catch(Exception e){        e.printStackTrace();      }  }}這個格式基本都一樣的,其中bookdb是我建立資料庫的名稱,getConnection和closeConnection是兩個操作開關,在使用的時候直接建立Database對象調用就好了。
第二部分:先看看我的資料庫books表
開啟iReport建立一張表不懂的話去看其他人的部落格,很多的。在介面上找到資料來源開啟進行如下選擇
這個應該很簡單的,設定完之後點擊Test會提示測試成功,否則就是你的某些設定沒做好,再重新檢查一遍
開啟組件面板找到拖動到任意bands中,在iReport4.6.0中有一部分表格是有想到的,一部分沒有,這個倒沒關係了有的話一路next下去
沒有的話直接完成後在圖表上面右鍵選擇chart data;點擊Details,
這裡是有預設名稱的,雙擊預設名稱開啟屬性設定介面
關於各個欄位的意思及作用,我之前的文章有寫到過,這裡就不在贅述,有需要的話就翻翻前面的好了。
設定好之後,點擊預覽會出現如下情況
原因是在設計面板右側圖表的屬性一欄,有一個屬性Evaluation Time,大致意思就是什麼時候進行更新數值,它預設是NOW
在這種情況下,只有你放在detail bands才會出現,但是它會出現很多次,不是我們想要的。將它設定為report就是在報表資料配置好之後進行更新,再次預覽
第三部分:做好了這一步之後,對於可以串連資料庫的人來說已經夠了,但是如果想要通過web動態產生客戶想要的報表呢,那麼我們還是要通過網路連接資料庫,之後再動態我們需要的模板
我使用Myeclipse+tomcat做的網站
package com.mySqlsource;import java.io.IOException;import java.io.OutputStream;import java.net.URLEncoder;import java.sql.Connection;import javax.servlet.ServletException;import javax.servlet.http.*;import net.sf.jasperreports.engine.JRExporterParameter;import net.sf.jasperreports.engine.JasperFillManager;import net.sf.jasperreports.engine.JasperPrint;import net.sf.jasperreports.engine.JasperReport;import net.sf.jasperreports.engine.export.JRPdfExporter;import net.sf.jasperreports.engine.util.JRLoader;public class MySqlSource extends HttpServlet{public void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {// TODO Auto-generated method stubdoPost(req, resp);}public  void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {// TODO Auto-generated method stubtry{String root_path=this.getServletContext().getRealPath("/");root_path=root_path.replace("\\", "/");String file_path=root_path+"chart/test_char.jasper";Database data=new Database();Connection con=data.getConnection();JasperReport report= (JasperReport)JRLoader.loadObject(file_path);JasperPrint print=JasperFillManager.fillReport(report, null, con);data.closeConnection(con);  OutputStream ouputStream = resp.getOutputStream();          resp.setContentType("application/pdf");        resp.setCharacterEncoding("UTF-8");          resp.setHeader("Content-Disposition", "attachment; filename=\""+ URLEncoder.encode("PDF報表", "UTF-8") + ".pdf\"");                      // 使用JRPdfExproter匯出器匯出pdf          JRPdfExporter exporter = new JRPdfExporter();          exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);        exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);          exporter.exportReport();                        ouputStream.close();  }catch(Exception e){e.printStackTrace();}}}檔案清單
test_char.jasper(本來想是test_chart.jasper後來發現建立時候少打了一個字母)是iReport預覽編譯之後產生的,在你的建立目錄中找得到
代碼很簡單,關鍵的幾個函數:
JasperReport report= (JasperReport)JRLoader.loadObject(file_path);JasperPrint print=JasperFillManager.fillReport(report, null, con);<pre name="code" class="html"> JRPdfExporter exporter = new JRPdfExporter();  exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);  
這幾個函數在之前的文章中也提到過,所以不再囉嗦。
特別注意:要將jasperreport的lib檔案最好是都放到web項目的WEB-INF/lib目錄下,生的報錯
如果需要源碼,留郵箱,希望能共同探討
iReport串連Mysql建立圖表報表