<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年12月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    隨筆分類

    相冊

    報表工具廠商們

    搜索

    •  

    最新評論

    閱讀排行榜

    通過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.  配置程序數據集

    • 步驟一:選擇服務器|服務器數據集,在彈出的窗口左上角點擊,選擇添加程序,可以把默認名字更改為恰當的名字,如下圖所示:

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



    了解Java報表工具就從這里開始
    posted on 2011-12-01 11:39 season 閱讀(145) 評論(0)  編輯  收藏 所屬分類: Java報表—問題解析
    主站蜘蛛池模板: 国产国拍亚洲精品mv在线观看| 成人人免费夜夜视频观看| 免费在线观看亚洲| 国产亚洲福利在线视频| 8x成人永久免费视频| 亚洲av日韩av不卡在线观看| 国产羞羞的视频在线观看免费| 亚洲精品无码午夜福利中文字幕| 永久免费无码日韩视频| 区三区激情福利综合中文字幕在线一区亚洲视频1| 亚洲影院天堂中文av色| 在线观看免费毛片| 亚洲av无码兔费综合| 免费真实播放国产乱子伦| 一级看片免费视频囗交| 亚洲高清国产AV拍精品青青草原| 一级毛片免费不卡直观看| 久久亚洲AV无码西西人体| aa级女人大片喷水视频免费| 猫咪免费人成网站在线观看| 亚洲美女免费视频| 成人无码区免费视频观看| 亚洲av永久中文无码精品综合| 暖暖免费高清日本中文| 亚洲色无码一区二区三区| 久久青草国产免费观看| 亚洲精品乱码久久久久久不卡| 亚洲精品黄色视频在线观看免费资源| 亚洲国产AV无码专区亚洲AV| 99久久免费国产香蕉麻豆| 亚洲s码欧洲m码吹潮| 亚洲精品成人久久久| 99久久99久久精品免费观看| 亚洲乱人伦精品图片| 波多野结衣免费视频观看| 麻豆精品成人免费国产片| 久久狠狠爱亚洲综合影院| 亚洲第一黄色网址| 99re热精品视频国产免费| 亚洲国产成人手机在线观看| 亚洲中文字幕不卡无码|