Java軟件報表軟件技術博客

          java報表軟件技術匯總 java報表軟件制作 報表軟件新聞
          posts - 355, comments - 100, trackbacks - 0, articles - 3
             :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理

          通過TableData接口可以讀取任何形式的數據源,java報表FineReport報表的數據來源可以是數據庫數據或是文本數據,并且還可以是其它任何類型的數據,因為這些所有的數據來源都實現了TableData接口,所以用戶只要實現了TableData接口,也就可以用自定義類型的數據源了。對于傳參,我們可以在程序數據集中寫入傳入的參數,此方案傳入的參數為 tableName columnNames 兩項;即傳入 數據庫表名 以及 所需要的列名 取出所需要的值;這里連的數據庫為java報表軟件FineReport的內置數據庫,適用時可輸入表名:stscore 列名 namesex。具體步驟如下

           

          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 = ";";

          // 自定義間隔符 暫定為‘;’ 即輸入列名參數時需像如此 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 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



          主站蜘蛛池模板: 偃师市| 滨州市| 浦城县| 五常市| 扎兰屯市| 鄂尔多斯市| 永川市| 墨竹工卡县| 洛宁县| 策勒县| 图们市| 蓬安县| 河东区| 佛山市| 仲巴县| 金秀| 平谷区| 汽车| 陕西省| 沙雅县| 富顺县| 咸宁市| 莱阳市| 西乌珠穆沁旗| 江阴市| 德令哈市| 略阳县| 淮滨县| 东辽县| 丰都县| 四平市| 北海市| 永昌县| 界首市| 周至县| 和硕县| 和顺县| 荥经县| 安多县| 金昌市| 迭部县|