<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 225  文章 - 98  trackbacks - 0
    <2011年7月>
    262728293012
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    隨筆分類

    相冊

    報表工具廠商們

    搜索

    •  

    最新評論

    閱讀排行榜

           Java報表工具的實際應用中,可能需要根據表名動態地改變數據源,比如在程序數據集中,通過傳進的表名參數,到數據庫取出對應的表作為數據源。以下就對這種情況舉例說明。

    1. 定義程序數據源

           首先在構建函數中定義好所用的程序數據集表結構,通過參數獲得表名;其次在初始化函數中準備數據并放入定義的表中;完整代碼如下:

    package com.demo;

     

    import java.sql.Connection;

    import java.sql.DriverManager;

    import java.sql.ResultSet;

    import java.sql.ResultSetMetaData;

    import java.sql.Statement;

    import java.util.ArrayList;

    import java.util.logging.Level;

    import com.fr.base.FRContext;

    import com.fr.data.AbstractTableData;

    import com.fr.report.parameter.Parameter;

     

    public class ParamTableDataDemo extends AbstractTableData{

           //列名數組,保存程序數據集所有列名

           private String[] columnNames = null;

           //定義程序數據集的列數量

           private int columnNum = 10;

           //保存查詢表的實際列數量

           private int colNum = 0;

           //保存查詢得到列值

    private ArrayList valueList = null;

          

    //構造函數,定義表結構,該表有10個數據列,列名為column#0column#1,。。。。。。column#9

    public ParamTableDataDemo(){

    //定義tableName參數

    this.parameters = new Parameter[]{new Parameter("tableName")};

    //定義程序數據集列名

               columnNames = new String[columnNum];

               for(int i=0;i<columnNum;i++){

                  columnNames[i] = "column#" + String.valueOf(i);

               }

           }

       

            //實現其他四個方法

           public int getColumnCount(){

               return columnNum;

           }

     

            public String getColumnName(int columnIndex){

                return columnNames[columnIndex];

            }

     

            public int getRowCount(){

               init();

                return valueList.size();

            }

     

            public Object getValueAt(int rowIndex, int columnIndex){

                init();

               if (columnIndex >= colNum) {

                   return null;

               }

               return ((Object[])valueList.get(rowIndex))[columnIndex];

            }

           

        //準備數據

           public void init(){

               //確保只被執行一次

               if(valueList != null){

                   return;

               }

               //保存得到的數據庫表名

               String tableName = parameters[0].getValue().toString();

               //構造SQL語句,并打印出來

               String sql = "select * from " + tableName + ";";

               FRContext.getLogger().log(Level.INFO, "Query SQL of ParamTableDataDemo: \n" + sql);

               //保存得到的結果集

               valueList = new ArrayList();

               //下面開始建立數據庫連接,按照剛才的SQL語句進行查詢

               Connection conn = this.getConnection();

               try{

                   Statement stmt = conn.createStatement();

                   ResultSet rs = stmt.executeQuery(sql);

                   //獲得記錄的詳細信息,然后獲得總列數

                   ResultSetMetaData rsmd = rs.getMetaData();

                   colNum = rsmd.getColumnCount();

                   //用對象保存數據

                   Object[] objArray=null;

                   while(rs.next()){

                       objArray = new Object[colNum];

                       for(int i = 0; i<colNum ; i++ ){

                          objArray[i]=rs.getObject(i+1);

                      }

                      // valueList中加入這一行數據

                      valueList.add(objArray);

                   }

                   //釋放數據庫資源

                   rs.close();

                   stmt.close();

                   conn.close();

                   //打印一共取到的數據行數量

                   FRContext.getLogger().log(Level.INFO, "Query SQL of ParamTableDataDemo: \n" + valueList.size() + " rows selected");

               }catch(Exception e){

                   e.printStackTrace();

               }     

            }

       

            // 獲取數據庫連接 driverName url 可以換成您需要的

            public Connection getConnection() {

               String driverName="sun.jdbc.odbc.JdbcOdbcDriver";

               String url="jdbc:odbc:FRDemo";

               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;

            }

       

            // 釋放一些資源,因為可能會有重復調用,所以需釋放valueList,將上次查詢的結果釋放掉

            public void release() throws Exception {

                super.release();

               this.valueList = null;

            }

    }

    編譯ParaTableData.java生成ParaTableData.class類。將生成的類文件拷貝到報表工程/WEB-INF/classes目錄下。由于該類是在com.demo包中的,因此最終應該將該ParaTableData.class放在/WEB-INF/classes/com/demo下面。此時該程序數據源便定義好了。

     

    2. 配置程序數據源

    ?           新建報表

    ?         在數據集中新建程序數據源,選擇我們定義好的報表程序數據集,如下圖

    名字可以自定義,如divtable

    Java報表工具新建程序數據集

     

    3. 使用程序數據集

           配置好程序數據源后便可以使用定義的student程序數據集了,選中該數據集點擊預覽按鈕,即可以輸入表名動態地獲取相應的數據表,并制作報表模板,如下圖

    Java報表工具使用程序數據集

     

    Java報表工具程序數據集預覽

     

    可以看到,我們已經將stscore表中的數據提取至程序數據集表中,像其他類型的數據集一樣,可以通過拖拽方法實現單元格數據列綁定。

    文章轉自:http://blog.vsharing.com/fanfanzheng/A1371295.html



    了解Java報表工具就從這里開始
    posted on 2011-07-15 14:06 season 閱讀(173) 評論(0)  編輯  收藏 所屬分類: Java報表—技術知識
    主站蜘蛛池模板: 亚洲国产中文v高清在线观看| 国产va免费观看| 两个人看的www高清免费视频 | 亚洲成人一级电影| a级毛片免费网站| 免费日韩在线视频| 99久久国产亚洲综合精品| 4444www免费看| 亚洲AV日韩AV永久无码绿巨人| 中文字幕免费人成乱码中国| 国产高清在线精品免费软件| 亚洲美女视频网址| 中国精品一级毛片免费播放| 亚洲成a人一区二区三区| 亚洲日韩乱码中文无码蜜桃| 野花香高清视频在线观看免费 | 亚洲日韩一区二区一无码| 99在线视频免费观看| 国产亚洲美女精品久久久| 国产精品美女久久久免费 | 人妻免费一区二区三区最新| 亚洲线精品一区二区三区| 一级毛片**免费看试看20分钟 | 亚洲熟妇AV日韩熟妇在线| 在线永久免费观看黄网站| 无码精品人妻一区二区三区免费| 亚洲中文字幕久久精品无码APP| 一级毛片免费视频| 亚洲AV无码无限在线观看不卡| 伊在人亚洲香蕉精品区麻豆| 久久免费美女视频| 中文字幕亚洲男人的天堂网络| 国产免费av片在线播放| 中国一级特黄的片子免费| 亚洲精品在线播放视频| 狠狠久久永久免费观看| 三年片在线观看免费西瓜视频| 亚洲人成www在线播放| 亚洲麻豆精品国偷自产在线91| 91成人免费观看| 色婷婷综合缴情综免费观看|