本站首页    管理页面    写新日志    退出

The Neurotic Fishbowl

[Java报表软件—问题解析]程序数据集传参使用解决方案
FineReport——报表技术领跑者 发表于 2011/12/1 11:22:24

通过TableData接口可以读取任何形式的数据源,java报表FineReport报表的数据来源可以是数据库数据或是文本数据,并且还可以是其它任何类型的数据,因为这些所有的数据来源都实现了TableData接口,所以用户只要实现了TableData接口,也就可以用自定义类型的数据源了。对于传参,我们可以在程序数据集中写入传入的参数,此方案传入的参数为 tableName 和 columnNames 两项;即传入 数据库表名 以及 所需要的列名 取出所需要的值; 这里连的数据库为java报表软件FineReport的内置数据库,适用时可输入表名:stscore 列名 name;sex。具体步骤如下: 1. 定义程序数据源 1.1 TableData接口简介 TableData接口所需实现的方法 只要实现了TableData接口,java报表软件FineReport报表引擎就能够读取数据源作为java报表数据源使用。TableData接口主要有5个方法,如下: 1). public int getColumnCount(); //获取TableData的总列数 2). public String getColumnName(int columnIndex); //获取TableData中第columnIndex列的列名。 3). public boolean hasRow(int rowIndex); //判断是否存在第rowIndex行,这主要是用于处理超大数据时,完全遍历所有数据获取总行数相当困难,用这个方法来判断第rowIndex行是否存在,存在则可读取。 4). public int getRowCount(); //获取TableData的总行数。 5). public Object getValueAt(int rowIndex, int columnIndex); //获取TableData中第columnIndex列,第rowIndex行的数据。 1.2 以PramTableDataDemo为例描述如何实现TableData接口 因为AbstractTableData已经实现了默认的hasRow(int rowIndex)方法,所以可以从AbstractTableData扩展,定义ParamTableDataDemo,代码如下: private String splitMark = ";"; // 自定义间隔符 暂定为‘;’ 即输入列名参数时需像如此 name;sex;age; private String[] columnNames = null; // 列字段名数组 保存在数据集窗口下一开始显示的数据列名称 private int columnNum = 10; // 自定义需要列出的列数量 即在数据集窗口列出的数据集下的字段数量 String[] colNames = null; // 保存取到的字段 即输入的参数字段,假如是name;sex 参数字段即为name 和 sex 两项 private ArrayList valueList = null; // 保存查询得到的值列 1.3 构造函数 public ParamTableDataDemo() { // 定义需要的参数 tablename columnNames this.parameters = new Parameter[] { new Parameter("tableName"),new Parameter("columnNames") }; // 初始化下列名,暂定为columnName#0,columnName#1......显示在数据集窗体中的 columnNames = new String[columnNum]; for (int i = 0; i < columnNum; i++) { columnNames[i] = "columnNames#" + String.valueOf(i); } } 1.4 匹配取值 for (int i = 0; i < parameters.length; i++) { If (parameters[i].getName().equals("tableName")) // 做匹配 tableName = parameters[i].getValue().toString(); else colNames = this.getParameters()[i].getValue().toString().split( splitMark); } 1.5 构造SQL语句 String sql = "select ";// 传入参数中输入的字段 for (int i = 0; i < colNames.length; i++) { colNames[i].trim(); if (i == colNames.length - 1) sql += colNames[i]; else {sql += colNames[i] + ",";} } sql += " from " + tableName + ";"; 1.6 获得数据库连接 public Connection getConnection() { String driverName = "sun.jdbc.odbc.JdbcOdbcDriver";// 加载驱动 String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=D:\\ProgramFiles\\finereport\\FineReport6.5\\WebReport\\ WEB-INF\\resources\\data\\FRDemo.mdb"; String username = ""; String password = ""; Connection con = null; try { Class.forName(driverName); con = DriverManager.getConnection(url, username, password); } catch (Exception e) { e.printStackTrace(); return null; } return con; } 具体实现代码如附件所示 编译ParamTableDataDemo.java,将生成的ParamTableDataDemo.class文件放到报表服务器的%\FineReport6.5\WebReport\WEB-INF\classes目录;注意:如该例子所示,其包名为com.demo,所以其类所在路径为com\demo 2. 配置程序数据集 • 步骤一:选择“服务器|服务器数据集”,在弹出的窗口左上角点击 ,选择添加程序,可以把默认名字更改为恰当的名字,如下图所示: http://www.finereport.com/forumimages/c-step1.jpg • 步骤二:点击选择您定义好的类文件,此处选择上面定义好的ParamTableDataDemo.class,点击下方的确定即添加完成。如下图所示: http://www.finereport.com/forumimages/c-step2.jpg 添加完成后的程序数据集并会在数据面板中出现,如下图所示: http://www.finereport.com/forumimages/c-step2-1.jpg 在参数对话框中输入需要传递的参数tableName,columnNames如图所示: http://www.finereport.com/forumimages/c-step2-input.jpg 点击确定之后出现如下图面: http://www.finereport.com/forumimages/c-step2-3.jpg 图片中的columnName#是在程序数据集中自定义的 3. 使用程序数据集 因为columnNames输入的是两个数据列名,所以columnNames#0,columnNames#1字段中存入了相应的name,sex字段数据 3.1 将columnNames#0,columnNames#1拖到B2,C2单元格中,表样设计如图所示 http://www.finereport.com/forumimages/c-table design.jpg 点击设计器预览:再次出现参数窗口,输入相应的参数: http://www.finereport.com/forumimages/c-input.jpg 再次输入相应的参数,点击确定,预览效果图如下: http://www.finereport.com/forumimages/c-preview.jpg 注意:程序数据集中的代码在配置时需要改动相应的url,如图所示: http://www.finereport.com/forumimages/c-notice1.jpg 此驱动和Url对应 服务器|自定义数据连接 中的driverName 和 URL http://www.finereport.com/forumimages/c-notice2.jpg 文章转自:http://blog.vsharing.com/fanfanzheng/A1453262.html

阅读全文(3048) | 回复(0) | 编辑 | 精华

 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)

 
 



The Neurotic Fishbowl

.: 公告

本博客提供详细的java报表软件的制作过程,发布java报表软件的版本更新信息,并适时对国内主流报表软件进行功能比较。


Bloginess

«July 2025»
12345
6789101112
13141516171819
20212223242526
2728293031

.: 我的分类(专题)

首页(357)
Java报表软件—制作笔记(54)
Java报表软件—功能比较(43)
Java报表软件—使用心得(21)
Java报表软件—行业动态(54)
Java报表软件—新闻资讯(48)
Java报表软件—技术知识(49)
Java报表软件—问题解析(2)


In the Bowl

.: 最新日志

如何对报表的参数控件赋值
java报表工具FineReport常见
报表怎么做 FineReport连接池原
报表怎么做FineReport数据连接之
报表模板之报表设计
报表模板之报表设计


.: 最新回复

回复:报表参数
好好学习,
好好学习,天天向上。买双 air jor
回复:理解FineReport缓存系列2
回复:理解FineReport缓存系列2


The Fishkeeper
blog名称:Java报表软件
日志总数:357
评论数量:69
留言数量:0
访问次数:1203677
建立时间:2006年4月16日



Text Me

.: 留言板

签写新留言

需要你的帮助


Other Fish in the Sea

.: 链接

报表开发工具  html5图表java报表开发工具




站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.031 second(s), page refreshed 144783840 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号