JasperReports报表数据源—JDBC、JavaBeans、TableModel、XML、CSV
2013-01-16 17:04
302 查看
1.JDBC数据源
这里将使用JDBC数据源创建一个简单的数据库报表,使用的是MySQL数据库。
getConnection()是一个封装了数据库操作的函数,可以返回一个Connection类型的数据库连接对象,报表引擎会使用这个连接对象,根据JRXML报表模板中的SQL查询语句,从数据库中取出对应的数据对模板进行填充。
2.JavaBean数据源
在JasperReports中,提供了两个数据源的实现,用来支持JavaBeans对象的数据源,
其中net.sf.jasperreports.engine.data.JRBeanArrayDataSource可以支持数组形式的JavaBeans,
而另外一个则可以支持JavaBeans对象数据源的实现为net.sf.jasperreports.engine.data.JRBeanCollectionDataSource,即这个实现可以支持集合形式的JavaBeans。如下是个人编写用来支持集合形式的JavaBeans代码:
在JasperReports中,参数都是通过Map集合组织的,在上述示例程序中(3),需要向报表模板中传递一个名称为title的变量,这个变量的值为“Data Source From JavaBeans”。构造参数集合完成以后,就可以通过fillReport函数把参数传递给报表模板,在报表模板中已经定义了接受和使用参数的方法,经过这些步骤,就完成了从程序中向报表模板传递参数的过程。
3.TableModel数据源
Source From TableModel”。构造参数集合完成以后,就可以通过fillReport函数把参数传递给报表模板,在报表模板中已经定义了接受和使用参数的方法,经过这些步骤,就完成了从程序中向报表模板传递参数的过程。
4.XML数据源
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数据源
在JasperReports中,参数都是通过Map集合组织的,在上述示例程序中(3),需要向报表模板中传递一个名称为title的变量,这个变量的值为“Data Source From CSV Data Source”。构造参数集合完成以后,就可以通过fillReport函数把参数传递给报表模板,在报表模板中已经定义了接受和使用参数的方法,经过这些步骤,就完成了从程序中向报表模板传递参数的过程。
这里将使用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函数把参数传递给报表模板,在报表模板中已经定义了接受和使用参数的方法,经过这些步骤,就完成了从程序中向报表模板传递参数的过程。
相关文章推荐
- spark-SQL的数据源的读写--jdbc--parquet--json--CSV
- Jasperreports6.3.1+Jaspersoft studio6.3.1进行报表开发实战教程(八)-Mysql数据源
- JasperReports报表数据源10
- 开发者使用JasperReport——不同数据源之XML和CSV数据源
- birt 报表设计(10)—jdbc数据源
- 图示ireport中使用javabean作数据源开发基于jasperreports报表过程
- TEC1401.Report开发技术总结 - 第六章 使用BI Publisher开发报表-创建XML数据源(1/5)
- 报表导出CSV,XML时,Textbox显示Name,而不隐藏。
- Jasperreports6.3.1+Jaspersoft studio6.3.1进行报表开发实战教程(五)-实体类集合数据源
- Jasperreports6.3.1+Jaspersoft studio6.3.1进行报表开发实战教程(五)-实体类集合数据源
- Jasperreports6.4.1+Jaspersoft studio6.4.1进行报表开发-实体类集合数据源
- 开发者使用JasperReport——不同数据源之XML和CSV数据源
- jasperreports导出报表报错:org.xml.sax.SAXException: http://java.sun.com/xml/jaxp/properties/schemaSource
- Jasperreports6.3.1+Jaspersoft studio6.3.1进行报表开发实战教程(八)-Mysql数据源
- 在struts中以无参数的javabeans的方式调用struts-config.xml中配置的数据源
- 润乾报表的两种数据源连接jndi和jdbc
- 如何在JasperReports中使用CSV文件作为数据源?
- 在Tomcat 5.5.4中配置JDBC数据源
- Oracle EBS R12 XML数据表格的Excel脚本报表
- 配置WebLogic JDBC 多数据源(Multi Data Sources)