如何在Eclipse中利用CR插件开发报表
要在Eclipse中开发CR报表,我首先要下载CR报表的插件Crystal Report for Eclipse Edition1.0(CR4E)
?
下载地址为
package com.lyl.utils;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class DBConn {public static final String USERNAME="sa";private static final String PASSWORD="123";private static final String CONNECTION_URL = "jdbc:sqlserver://localhost:1433;databaseName=test";private static Connection conn=null;/** * 准备一个本地线程池(为了装连接) */private static ThreadLocal<Connection> t=new ThreadLocal<Connection>();static{try {Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static Connection getConn(){//先从连接池里面拿conn=t.get();try {if(conn==null){conn=DriverManager.getConnection(CONNECTION_URL, USERNAME, PASSWORD);}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return conn;}public static void closeConn(){conn=t.get();try {if(conn!=null&& !conn.isClosed()){conn.close();//清空关闭的连接t.set(null);}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}?
其次,建立一个操作数据库的DAO类,StudentDao.java
package com.lyl.dao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.ArrayList;import java.util.List;import com.lyl.entity.Student;import com.lyl.utils.DBConn;public class StudentDao {public List<Student> queryAll() {Connection conn=null;PreparedStatement pst=null;List<Student> studentList=new ArrayList<Student>();String sql="select stu.sid,stu.sname,stu.age,stu.cardid,stu.tid from dbo.Student stu";conn=DBConn.getConn();try {pst=conn.prepareStatement(sql);ResultSet rs=pst.executeQuery();Student stu=null;while(rs.next()){stu=new Student();stu.setSid(rs.getInt("sid"));stu.setSname(rs.getString("sname"));stu.setAge(rs.getInt("age"));stu.setTid(rs.getInt("tid"));stu.setCardid(rs.getString("cardid"));studentList.add(stu);}} catch (Exception e) {DBConn.closeConn();e.printStackTrace();}finally{DBConn.closeConn();}return studentList;}}
?
和数据库表对应的实体类Student.java
package com.lyl.entity;public class Student {private int sid;private String sname;private int age;private String cardid;private int tid;public int getSid() {return sid;}public void setSid(int sid) {this.sid = sid;}public String getSname() {return sname;}public void setSname(String sname) {this.sname = sname;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getCardid() {return cardid;}public void setCardid(String cardid) {this.cardid = cardid;}public int getTid() {return tid;}public void setTid(int tid) {this.tid = tid;}}
?
以上全多做好后,下面的才是关键,如何与报表关联。
?
首先,我们可以通过,首先我们需要一个空白的报表文件,此时项目中应该在新建的时候就自动生成了一个报表文件CrystalReport1.rpt和一个CrystalReport-viewer.jsp的jsp文件,因此我们不需要新建了,可以直接用。
?
1、打开报表,可以看到报表中有Layout(布局),Formulas(计算公式),Data(数据),Preview(预览),Crystal Report Community等几种视图,我么打开Data视图。
2、在项目资源管理其中,选中java视图,找到要在报表显示的数据对于的实体。这里是student.java,选中student.java前面的图标,拉倒报表视图中,此时我们可以看到Student的各个字段都在报表中,选中要显示是字段,右键——insert,这时我们打Layout视图中可以看到对应的字段了,有必要调整下布局。
?
3、在CrystalReport-viewer.jsp添加一下代码。
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %><%@ taglib uri="/crystal-tags-reportviewer.tld" prefix="crviewer" %><crviewer:viewer reportSourceType="reportingComponent" viewerName="Report1-viewer" reportSourceVar="Report1" isOwnPage="true"><crviewer:report reportName="Report1.rpt" /></crviewer:viewer><%//Crystal Java Reporting Component (JRC) imports.%><%-- jrcerom.jar--%><%@page import="com.crystaldecisions.sdk.occa.report.application.*" %><%-- rascore.jar--%><%@page import="com.crystaldecisions.sdk.occa.report.lib.*" %><%@page import="com.businessobjects.samples.*,java.util.*" %><%@page import="com.lyl.dao.StudentDao,com.lyl.entity.Student" %><%//水晶报表的位置final String REPORT_NAME = "CrystalReport1.rpt";%><%String className="com.lyl.entity.Student";String tableAlias="student";ReportClientDocument reportDocument=new ReportClientDocument();reportDocument.open(REPORT_NAME, 0);StudentDao stuDao=new StudentDao();List<Student> stuList =stuDao.queryAll();CRJavaHelper.passPOJO(reportDocument,stuList,className,tableAlias,""); %>
?
?4、启动Tomcate,运行CrystalReport-viewer.jsp,将可以看到所有的学生信息都会在报表中显示了。
?
?
?
?
?
?
?
?
?