程序数据集传参使用解决方案

程序数据集传参使用解决方案

通过TableData接口可以读取任何形式的数据源,java报表FineReport报表的数据来源可以是数据库数据或是文本数据,并且还可以是其它任何类型的数据,因为这些所有的数据来源都实现了TableData接口,所以用户只要实现了TableData接口,也就可以用自定义类型的数据源了。对于传参,我们可以在程序数据集中写入传入的参数,此方案传入的参数为 tableName columnNames 两项;即传入 数据库表名 以及 所需要的列名 取出所需要的值; 这里连的数据库为java报表工具FineReport的内置数据库,适用时可输入表名:stscore 列名 namesex。具体步骤如下

 

1.  定义程序数据源

1.1   TableData接口简介

TableData接口所需实现的方法

只要实现了TableData接口,java报表工具FineReport报表引擎就能够读取数据源作为报表数据源使用。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 = ";";

// 自定义间隔符 暂定为‘;’ 即输入列名参数时需像如此 namesexage

private String[] columnNames = null;

// 列字段名数组 保存在数据集窗口下一开始显示的数据列名称

private int columnNum = 10;

// 自定义需要列出的列数量 即在数据集窗口列出的数据集下的字段数量

 

String[] colNames = null;

// 保存取到的字段 即输入的参数字段,假如是namesex 参数字段即为name  sex两项

  private ArrayList valueList = null;

  // 保存查询得到的值列

1.3   构造函数

public ParamTableDataDemo() {

// 定义需要的参数 tablename columnNames

this.parameters = new Parameter[]

{

 new Parameter("tableName"),new Parameter("columnNames")

 };

// 初始化下列名,暂定为columnName#0columnName#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.  配置程序数据集

  • 步骤一:选择服务器|服务器数据集,在弹出的窗口左上角点击,选择添加程序,可以把默认名字更改为恰当的名字,如下图所示:

程序数据集传参使用解决方案_第1张图片

http://www.finereport.com/forumimages/c-step1.jpg

  • 步骤二:点击选择您定义好的类文件,此处选择上面定义好的ParamTableDataDemo.class,点击下方的确定即添加完成。如下图所示:

程序数据集传参使用解决方案_第2张图片

http://www.finereport.com/forumimages/c-step2.jpg

添加完成后的程序数据集并会在数据面板中出现,如下图所示:

程序数据集传参使用解决方案_第3张图片

http://www.finereport.com/forumimages/c-step2-1.jpg

在参数对话框中输入需要传递的参数tableName,columnNames如图所示:

程序数据集传参使用解决方案_第4张图片

http://www.finereport.com/forumimages/c-step2-input.jpg

             点击确定之后出现如下图面:

           程序数据集传参使用解决方案_第5张图片

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%20design.jpg

        点击设计器预览:再次出现参数窗口,输入相应的参数:

程序数据集传参使用解决方案_第6张图片

http://www.finereport.com/forumimages/c-input.jpg

再次输入相应的参数,点击确定,预览效果图如下:

程序数据集传参使用解决方案_第7张图片

http://www.finereport.com/forumimages/c-preview.jpg

 

 

 

 

 

 

注意:程序数据集中的代码在配置时需要改动相应的url,如图所示:

程序数据集传参使用解决方案_第8张图片

http://www.finereport.com/forumimages/c-notice1.jpg

此驱动和Url对应 服务器|自定义数据连接 中的driverName  URL

程序数据集传参使用解决方案_第9张图片

http://www.finereport.com/forumimages/c-notice2.jpg

文章转自:http://blog.vsharing.com/fanfanzheng/A1453262.html



了解Java报表工具就从这里开始

你可能感兴趣的:(程序数据集传参使用解决方案)