這兩天項目要用水晶報表(crystal reports),上網查了下資料,網上的資料不是太多.
1.安裝
首先用的時候先到官網(https://www.sap.com/china/product/analytics/crystal-reports-eclipse.html)下載下傳插件(SAP Crystal Reports(Eclipse 版))內建到eclipse中 ,下載下傳之後解壓

将檔案放到eclipse相應的檔案夾下。重新開機eclipse!
2.建項目
eclipse右鍵建立項目,選擇Crystal Reports Web Project
輸入項目名
finaish,項目結構展示如下:
3.建立java取數和資料庫連接配接
有兩種方式
第一種:
1)
這個帶出來的執行個體。CrystalReport1.rpt 可以在Eclipse直接去連接配接資料庫表和視圖。直接把
資料取出來不做任何修改的展示。
我這裡使用POJO的方式來做報表。以滿足日常中在JAVA做資料處理後。做報表的顯示。
首先建立和資料庫表一樣名字的POJO Person.java
package com.businessobjects.samples;
import java.util.Date;
public class Person {
private int id;
private String t_name;
private String password;
private Date birthday;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getT_name() {
return t_name;
}
public void setT_name(String t_name) {
this.t_name = t_name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Person() {
}
public Person(int id, String t_name, String password, Date birthday) {
super();
this.id = id;
this.t_name = t_name;
this.password = password;
this.birthday = birthday;
}
@Override
public String toString() {
return "Person [id=" + id + ", t_name=" + t_name + ", password="
+ password + ", birthday=" + birthday + "]";
}
}
建立與資料庫連接配接的類
package com.businessobjects.samples;
import java.sql.Connection;
import java.sql.DriverManager;
public class DataBaseConnection {
private final String DBDRIBER ="com.mysql.jdbc.Driver";
private final String DBURL = "jdbc:mysql://IP:端口/資料庫名稱?useUnicode=true&characterEncoding=utf8";
private final String DBUSER = "使用者";
private final String DBPASSWORD = "密碼";
private Connection conn= null;
public DataBaseConnection(){
try{
Class.forName(DBDRIBER);
this.conn = DriverManager.getConnection(DBURL, DBUSER, DBPASSWORD);
}catch(Exception e){
e.printStackTrace();
}
}
public Connection getConnection(){
return this.conn;
}
public void close(){
try{
this.conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
建立取數的DAO接口
package com.businessobjects.samples;
import java.util.List;
public interface IPersonDao {
public void insert(Person person)throws Exception;
public void update(Person person)throws Exception;
public void delete(Person person)throws Exception;
public Person queryById(int id)throws Exception;
public List queryAll() throws Exception;
public List queryByLike(String cond)throws Exception;
}
對接口寫實作。該處隻做QUERYALL的實作。作為示例
package com.businessobjects.samples;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
public class PersonDao implements IPersonDao {
public void insert(Person person) throws Exception {
// TODO Auto-generated method stub
}
public void update(Person person) throws Exception {
// TODO Auto-generated method stub
}
public void delete(Person person) throws Exception {
// TODO Auto-generated method stub
}
public Person queryById(int id) throws Exception {
// TODO Auto-generated method stub
return null;
}
public List queryAll() throws Exception {
List all = new ArrayList();
String sql = "select * from person";
PreparedStatement stat = null;
DataBaseConnection dbc = null;
try{
//連接配接資料庫
dbc = new DataBaseConnection();
stat = dbc.getConnection().prepareStatement(sql);
ResultSet rst = stat.executeQuery();
while(rst.next()){
Person person = new Person();
person.setId(rst.getInt(1));
person.setT_name(rst.getString(2));
person.setPassword(rst.getString(3));
person.setBirthday(rst.getDate(4));
all.add(person);
}
}catch(Exception e){
e.printStackTrace();
throw new Exception("查詢出現異常");
}finally{
dbc.close();
}
return all;
}
public List queryByLike(String cond) throws Exception {
// TODO Auto-generated method stub
return null;
}
}
這樣整體就寫完了。
2)建立報表
右擊項目選擇
建立一張空白報表。在報表視圖裡把下如藍色标記的地方拖到 Data 的空白部分
設計報表一張簡單的報表,從右側選擇要展示的字段,直接拖到展示的地方
選擇如下
OK,生成jsp代碼如下
com.crystaldecisions.sdk.occa.report.application.OpenReportOptions,
com.crystaldecisions.sdk.occa.report.application.ReportClientDocument,
com.crystaldecisions.sdk.occa.report.lib.ReportSDKExceptionBase" %>
// This sample code calls methods from the CRJavaHelper class, which
// contains examples of how to use the BusinessObjects APIs. You are free to
// modify and distribute the source code contained in the CRJavaHelper class.
try {
String reportName = "Person.rpt";
ReportClientDocument clientDoc = (ReportClientDocument) session.getAttribute(reportName);
if (clientDoc == null) {
// Report can be opened from the relative location specified in the CRConfig.xml, or the report location
// tag can be removed to open the reports as Java resources or using an absolute path
// (absolute path not recommended for Web applications).
clientDoc = new ReportClientDocument();
clientDoc.setReportAppServer(ReportClientDocument.inprocConnectionString);
// Open report
clientDoc.open(reportName, OpenReportOptions._openAsReadOnly);
// ****** BEGIN POPULATE WITH RESULTSET SNIPPET ****************
{
// This option is not applicable for the report you have chosen
}
// ****** END POPULATE WITH RESULTSET SNIPPET ****************
// ****** BEGIN POPULATE WITH POJO SNIPPET ****************
{
// This option is not applicable for the report you have chosen
}
// ****** END POPULATE WITH POJO SNIPPET ****************
// Store the report document in session
session.setAttribute(reportName, clientDoc);
}
// ****** BEGIN CONNECT CRYSTALREPORTPAGEVIEWER SNIPPET ****************
{
// Create the CrystalReportViewer object
CrystalReportViewer crystalReportPageViewer = new CrystalReportViewer();
String reportSourceSessionKey = reportName+"ReportSource";
Object reportSource = session.getAttribute(reportSourceSessionKey);
if (reportSource == null)
{
reportSource = clientDoc.getReportSource();
session.setAttribute(reportSourceSessionKey, reportSource);
}
// set the reportsource property of the viewer
crystalReportPageViewer.setReportSource(reportSource);
// Apply the viewer preference attributes
// Process the report
crystalReportPageViewer.processHttpRequest(request, response, application, null);
}
// ****** END CONNECT CRYSTALREPORTPAGEVIEWER SNIPPET ****************
} catch (ReportSDKExceptionBase e) {
out.println(e);
}
%>
運作項目通路頁面就可以看到展示的報表了
第二種:
https://my.oschina.net/u/2391879/blog/886847