您的位置:首页 > 编程语言 > ASP

JasperReports报表数据源—JDBC、JavaBeans、TableModel、XML、CSV

2013-01-16 17:04 302 查看
1.JDBC数据源

        这里将使用JDBC数据源创建一个简单的数据库报表,使用的是MySQL数据库。

/**
*
* @author 源神
* 注明:省略了import引入包
*/
public class JDBCDataSource {
/*
* 取得mysql数据库连接
* @return
*/
public static Connection getConnection() throws ClassNotFoundException, SQLException {
String driver = "com.mysql.jdbc.Driver"; //驱动程序名
String user = "root"; //MySQL配置时的用户名
String password = "yuanshen"; //Java连接MySQL配置时的密码
String url = "jdbc:mysql://localhost:3306/jdbc"; //url指向要访问的数据库名jdbc

Class.forName(driver); //加载驱动程序
Connection conn = DriverManager.getConnection(url, user, password); //连接数据库
return conn;
}

public static void main(String[] args) throws ClassNotFoundException, SQLException {
try {
//(1)加载报表设计模板文件
JasperDesign jasperDesign = JRXmlLoader.load("JDBC.jrxml");
//(2)编译报表模板
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
//(3)填充报表
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, new HashMap(),
getConnection());
//(4)预览报表,第二个参数表示isExitOnClose,此处设为false
JasperViewer jv = new JasperViewer(jasperPrint,false);
jv.pack(); //按照里面的控件的首选大小PerferredSize来设置最佳的窗体大小,使窗口正好显示里面所有的控件

jv.setTitle("打印预览");
jv.setVisible(true);
} catch(JRException e) {
e.printStackTrace();
}
}
}


       getConnection()是一个封装了数据库操作的函数,可以返回一个Connection类型的数据库连接对象,报表引擎会使用这个连接对象,根据JRXML报表模板中的SQL查询语句,从数据库中取出对应的数据对模板进行填充。
2.JavaBean数据源

      在JasperReports中,提供了两个数据源的实现,用来支持JavaBeans对象的数据源,

其中net.sf.jasperreports.engine.data.JRBeanArrayDataSource可以支持数组形式的JavaBeans,

而另外一个则可以支持JavaBeans对象数据源的实现为net.sf.jasperreports.engine.data.JRBeanCollectionDataSource,即这个实现可以支持集合形式的JavaBeans。如下是个人编写用来支持集合形式的JavaBeans代码:

/**
*
* @author 源神
* 注明:省略了import引入包
*/
public class JavaBeanDataSource {
/*
* 获取JavaBean数据
* @return
*/
public static List<User> getData() {
List<User> data = new ArrayList<User>();
data.add(new User("1","yuanshen")); //假设在User类只有两个属性,此处 id="1",name="yuanshen"
return data;
}

public static void main(String[] args) {
try {
//(1)加载报表设计模板文件
JasperDesign jasperDesign = JRXmlLoader.load("JavaBeans.jrxml");
//(2)编译报表模板
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
//(3)填充报表
HashMap params = new HashMap();
params.put("title", "Data Source From JavaBeans");

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params,
new JRBeanCollectionDataSource(getData()));

//(4)预览报表,第二个参数表示isExitOnClose,此处设为false
JasperViewer jv = new JasperViewer(jasperPrint,false);
jv.pack(); //按照里面的控件的首选大小PerferredSize来设置最佳的窗体大小,使窗口正好显示里面所有的控件
jv.setTitle("打印预览");
jv.setVisible(true);
} catch(JRException e) {
e.printStackTrace();
}
}
}

        在JasperReports中,参数都是通过Map集合组织的,在上述示例程序中(3),需要向报表模板中传递一个名称为title的变量,这个变量的值为“Data Source From JavaBeans”。构造参数集合完成以后,就可以通过fillReport函数把参数传递给报表模板,在报表模板中已经定义了接受和使用参数的方法,经过这些步骤,就完成了从程序中向报表模板传递参数的过程。

3.TableModel数据源

/**
*
* @author 源神
* 注明:省略了import引入包
*/
public class TableModelDataSource {
/*
* 生成、并预览报表
* @param dataModel
* 调用:export(table.getModel());
*/
public void export(TableModel dataModel){
try {
//(1)加载报表设计模版文件
JasperDesign jasperDesign = JRXmlLoader.load("TableModel.jrxml");
//(2)编译报表模板
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
//(3)填充报表
HashMap params = new HashMap();
params.put("title", "Data Source From TableModel");

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params,
new JRTableModelDataSource(dataModel));
//(4)预览报表,第二个参数表示isExitOnClose,此处设为false
JasperViewer jv = new JasperViewer(jasperPrint,false);
jv.pack(); //按照里面的控件的首选大小PerferredSize来设置最佳的窗体大小,使窗口正好显示里面所有的控件
jv.setTitle("打印预览");
jv.setVisible(true);
} catch (JRException e) {
e.printStackTrace();
}
}
}
        在JasperReports中,参数都是通过Map集合组织的,在上述示例程序中(3),需要向报表模板中传递一个名称为title的变量,这个变量的值为“Data
Source From TableModel”。构造参数集合完成以后,就可以通过fillReport函数把参数传递给报表模板,在报表模板中已经定义了接受和使用参数的方法,经过这些步骤,就完成了从程序中向报表模板传递参数的过程。
4.XML数据源

/**
*
* @author 源神
* 注明:省略了import引入包
*/
public class XMLDataSource {
public static void main(String[] args) {
try {
//(1)加载报表设计模板文件
JasperDesign jasperDesign = JRXmlLoader.load("XMLDataSource.jrxml");
//(2)编译报表模板
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
//(3)填充报表
HashMap params = new HashMap();
params.put("title", "Data Source From XML Data Source");
Document document = JRXmlUtils.parse(JRLoader.getLocationInputStream("Jobs.xml"));

params.put(JRXPathQueryExecuterFactory.PARAMETER_XML_DATA_DOCUMENT, document);
params.put(JRXPathQueryExecuterFactory.XML_NUMBER_PATTERN, "#,##0.##");

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params);
//(4)预览报表,第二个参数表示isExitOnClose,此处设为false
JasperViewer jv = new JasperViewer(jasperPrint,false);
jv.pack(); //按照里面的控件的首选大小PerferredSize来设置最佳的窗体大小,使窗口正好显示里面所有的控件
jv.setTitle("打印预览");
jv.setVisible(true);
} catch(JRException e) {
e.printStackTrace();
}
}
}
在使用XML文档作为数据源的时候,并没有直接提供数据源,而是在参数中把XML文档及相关设置传递给报表模板。其中fillReport()方法仅有两个参数,所有XML文档数据源的内容和设置都放在params参数中。它定义了3个需要向报表模板传递的参数:

      1.在JasperReports中,参数都是通过Map集合组织的,在上述示例程序中(3),需要向报表模板中传递一个名称为title的变量,这个变量的值为“Data Source From XML Data Source”。此处向报表模板中传递这个标题字符串。

      2.第二个参数 JRXPathQueryExecuterFactory.PARAMETER_XML_DATA_DOCUMENT 是JasperReports中内置的参数,用来向报表模板传递一个XML数据源文档,其中这个参数的值是一个Document对象,这个对象可以通过JRXmlUtils的parse方法从XML文件中取得。

      3.第三个参数同样是JasperReports中内置的参数 JRXPathQueryExecuterFactory.XML_NUMBER_PATTERN,定义了这个XML文档中数字节点值的格式。

      通过上面这几个参数,就可以把XML数据源传递到报表模板中,从而完成报表模板的填充。

5.CSV数据源

/**
*
* @author 源神
* 注明:省略了import引入包
*/
public class CSVDataSource {
/*
* 从CSV文件中获取数据
* @return
*/
private static JRCsvDataSource getDataSource() throws JRException {
JRCsvDataSource ds = new JRCsvDataSource(JRLoader.getLocationInputStream("CsvDataSource.csv"));
//ds.setUseFirstRowAsHeader(true); //CSV文件中第一行直接读取为各个列的列名
String[] columnName = new String[] {"id","name"}; //只提供了数据内容,没有提供列名,设置CSV的每个列名
ds.setColumnNames(columnName);
ds.setRecordDelimiter("\r\n");
//ds.setFieldDelimiter("-"); //CSV文件中默认的列分隔符为"," 此处可设置列的分隔符为"-"
return ds;
}

public static void main(String[] args) {
try {
//(1)加载报表设计模板文件
JasperDesign jasperDesign = JRXmlLoader.load("CSVDataSource.jrxml");
//(2)编译报表模板
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
//(3)填充报表
HashMap params = new HashMap();
params.put("title", "Data Source From CSV Data Source");

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params,
getDataSource());
//(4)预览报表,第二个参数表示isExitOnClose,此处设为false
JasperViewer jv = new JasperViewer(jasperPrint,false);
jv.pack(); //按照里面的控件的首选大小PerferredSize来设置最佳的窗体大小,使窗口正好显示里面所有的控件
jv.setTitle("打印预览");
jv.setVisible(true);
} catch(JRException e) {
e.printStackTrace();
}
}
}

        在JasperReports中,参数都是通过Map集合组织的,在上述示例程序中(3),需要向报表模板中传递一个名称为title的变量,这个变量的值为“Data Source From CSV Data Source”。构造参数集合完成以后,就可以通过fillReport函数把参数传递给报表模板,在报表模板中已经定义了接受和使用参数的方法,经过这些步骤,就完成了从程序中向报表模板传递参数的过程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: