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

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

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

    Java軟件報表軟件技術(shù)博客

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

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

     

    1.  定義程序數(shù)據(jù)源

    1.1    TableData接口簡介

    TableData接口所需實現(xiàn)的方法

    只要實現(xiàn)了TableData接口,java報表軟件FineReport報表引擎就能夠讀取數(shù)據(jù)源作為java報表數(shù)據(jù)源使用。TableData接口主要有5個方法,如下:

    1). public int getColumnCount(); //獲取TableData的總列數(shù)

    2). public String getColumnName(int columnIndex); //獲取TableData中第columnIndex列的列名。

    3). public boolean hasRow(int rowIndex);  //判斷是否存在第rowIndex行,這主要是用于處理超大數(shù)據(jù)時,完全遍歷所有數(shù)據(jù)獲取總行數(shù)相當(dāng)困難,用這個方法來判斷第rowIndex行是否存在,存在則可讀取。

    4). public int getRowCount(); //獲取TableData的總行數(shù)。

    5). public Object getValueAt(int rowIndex, int columnIndex); //獲取TableData中第columnIndex列,第rowIndex行的數(shù)據(jù)。

    1.2    PramTableDataDemo為例描述如何實現(xiàn)TableData接口

    因為AbstractTableData已經(jīng)實現(xiàn)了默認(rèn)的hasRow(int rowIndex)方法,所以可以從AbstractTableData擴展,定義ParamTableDataDemo,代碼如下:

    private String splitMark = ";";

    // 自定義間隔符 暫定為‘;’ 即輸入列名參數(shù)時需像如此 namesexage

    private String[] columnNames = null;

    // 列字段名數(shù)組 保存在數(shù)據(jù)集窗口下一開始顯示的數(shù)據(jù)列名稱

    private int columnNum = 10;

    // 自定義需要列出的列數(shù)量 即在數(shù)據(jù)集窗口列出的數(shù)據(jù)集下的字段數(shù)量

     

    String[] colNames = null;

    // 保存取到的字段 即輸入的參數(shù)字段,假如是namesex 參數(shù)字段即為name sex 兩項

      private ArrayList valueList = null;

      // 保存查詢得到的值列

    1.3    構(gòu)造函數(shù)

    public ParamTableDataDemo() {

    // 定義需要的參數(shù) tablename columnNames

    this.parameters = new Parameter[]

    {

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

     };

    // 初始化下列名,暫定為columnName#0columnName#1......顯示在數(shù)據(jù)集窗體中的

           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    構(gòu)造SQL語句

    String sql = "select ";// 傳入?yún)?shù)中輸入的字段

    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    獲得數(shù)據(jù)庫連接

    public Connection getConnection() {

          String driverName = "sun.jdbc.odbc.JdbcOdbcDriver";// 加載驅(qū)動

          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;

        }

          具體實現(xiàn)代碼如附件所示

    編譯ParamTableDataDemo.java,將生成的ParamTableDataDemo.class文件放到報表服務(wù)器的%\FineReport6.5\WebReport\WEB-INF\classes目錄;注意:如該例子所示,其包名為com.demo,所以其類所在路徑為com\demo

    2.  配置程序數(shù)據(jù)集

    • 步驟一:選擇服務(wù)器|服務(wù)器數(shù)據(jù)集,在彈出的窗口左上角點擊 ,選擇添加程序,可以把默認(rèn)名字更改為恰當(dāng)?shù)拿郑缦聢D所示:

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

    • 步驟二:點擊選擇您定義好的類文件,此處選擇上面定義好的ParamTableDataDemo.class,點擊下方的確定即添加完成。如下圖所示:

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

    添加完成后的程序數(shù)據(jù)集并會在數(shù)據(jù)面板中出現(xiàn),如下圖所示:

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

    在參數(shù)對話框中輸入需要傳遞的參數(shù)tableName,columnNames如圖所示:

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

                 點擊確定之后出現(xiàn)如下圖面:

              

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

              圖片中的columnName#是在程序數(shù)據(jù)集中自定義的

    3. 使用程序數(shù)據(jù)集

           因為columnNames輸入的是兩個數(shù)據(jù)列名,所以columnNames#0,columnNames#1字段中存入了相應(yīng)的name,sex字段數(shù)據(jù)

    3.1 columnNames#0,columnNames#1拖到B2,C2單元格中,表樣設(shè)計如圖所示
            
            
    http://www.finereport.com/forumimages/c-table design.jpg

            點擊設(shè)計器預(yù)覽:再次出現(xiàn)參數(shù)窗口,輸入相應(yīng)的參數(shù):

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

    再次輸入相應(yīng)的參數(shù),點擊確定,預(yù)覽效果圖如下:

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

     

     

     

     

     

     

    注意:程序數(shù)據(jù)集中的代碼在配置時需要改動相應(yīng)的url,如圖所示:

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

    此驅(qū)動和Url對應(yīng)服務(wù)器|自定義數(shù)據(jù)連接 中的driverName URL


    http://www.finereport.com/forumimages/c-notice2.jpg
    文章轉(zhuǎn)自:http://blog.vsharing.com/fanfanzheng/A1453262.html



    主站蜘蛛池模板: 777成影片免费观看| 亚洲精品国产免费| 在线精品免费视频| 久久精品视频免费| 久久成人18免费网站| 亚洲AV电影天堂男人的天堂| 久久亚洲国产成人精品性色 | 亚洲精品**中文毛片| 中文字幕第一页亚洲| 国产男女猛烈无遮挡免费视频| 真人做人试看60分钟免费视频| 国内永久免费crm系统z在线| 免费视频成人国产精品网站| 亚洲国产精品无码久久| 亚洲一区免费在线观看| 亚洲高清视频在线播放| 国产亚洲福利精品一区| 亚洲伊人久久成综合人影院| 免费国产在线观看老王影院| 免费无码又爽又刺激高潮的视频| 亚洲免费视频观看| 16女性下面无遮挡免费| 一区二区三区四区免费视频| 本免费AV无码专区一区| jizz在线免费观看| 精品多毛少妇人妻AV免费久久| 一区二区三区在线免费观看视频| 粉色视频成年免费人15次| 国产精品亚洲а∨天堂2021| 亚洲成av人片在线天堂无| 久久精品熟女亚洲av麻豆| 亚洲国产精品精华液| 亚洲av无码一区二区三区在线播放 | 亚洲图片中文字幕| 亚洲熟妇av一区二区三区下载| 中文字幕亚洲精品| 亚洲精品在线不卡| 亚洲一区二区三区深夜天堂| 亚洲AV色吊丝无码| 亚洲国产精品无码久久98 | 免费看少妇作爱视频|