乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Birt使用動態(tài)sql創(chuàng)建data set

       昵稱9552892 2013-09-04
      Eclipse Birt可以使用sql query來創(chuàng)建數(shù)據(jù)集,通過在報表中設(shè)置參數(shù)(Parameter)來傳遞客戶端的用戶輸入,同時可以設(shè)置data set參數(shù)并且與報表參數(shù)關(guān)聯(lián)(這兩個參數(shù)是不同的),這樣可以將客戶端的用戶輸入傳遞給data set的參數(shù)供sql query的where語句使用,這是通常的創(chuàng)建sql語句的做法,但是種方法只適合固定的sql語句,對于動態(tài)的sql就不適用了。
      如有這樣一條sql query
      Sql代 碼
      select user.first_name firstName,user.second_name secondName,user.sex sex,user.age age,user.birth_day birthDay  
      from user_table user  
      where user.second_name = ?  
       and  user.sex = ?  

      定義兩個報表參數(shù)SecondName,Sex定義兩個data set參數(shù)secondname,sex并與報表參數(shù)關(guān)聯(lián),用戶查看報表時必須要輸入姓和性別作為查詢條件,如果不輸則對應(yīng)的參數(shù)值就是null,假如查 姓李的人,性別不輸,則sql語句就變成這樣select ... from ... where user.second_name = '李' and user.sex = null 顯然這樣的sql是查不出結(jié)果的,哪有sex是null的人呢?對于這種情況應(yīng)該是如果用戶某一個參數(shù)不輸則不將它做為查詢條件,上面的sql應(yīng)該變成 select ... from ... where user.second_name = '李'就合理了,把所有姓李的人不分男女都查出來,這就需要使用動態(tài)sql語句了,方法有兩種:
      一、date set編輯器中有property binging的屬性,可以在右邊的query text框中設(shè)輸入sql語句,或者用expression生成器輔助生成sql語句,上面的例子用種方法應(yīng)該寫成
      Javascript 代碼
      var query = " select user.first_name firstName,user.second_name secondName,user.sex sex,user.age age,user.birth_day birthDay";  
          query += " from user_table user";  
          query += " where user.second_name = ?"  
          if(param["Sex"].value != null){  
              query += " and  user.sex = '" + param["Sex"].value + "'";  
          }  
          this.text = query;  

      二、利用script,在data set的before open事件中
      Javascript 代碼
      var query = " select user.first_name firstName,user.second_name secondName,user.sex sex,user.age age,user.birth_day birthDay";  
          query += " from user_table user";  
          query += " where user.second_name = ?"  
      var sex = reportContext.getParameterValue("Sex");  
      if(sex != null){  
         query += " and  user.sex = '" + sex + "'";   
      }  
      this.queryText = query;  


      這兩種方法的區(qū)別在于:第一種方法是在報表run的時候創(chuàng)建data set,因此在data set編輯器里是沒有辦法像通常那樣預(yù)覽的 而第二種方法是寫在data set的beforeOpen中的,所以在打開data set之前會創(chuàng)建data set因此可以像通常那樣預(yù)覽數(shù)據(jù)集結(jié)果等等
      第一種方法中用param["sex"].value獲得Sex參數(shù)值,而第二種方法需要利用reportContext來獲取Sex參數(shù)的值
      另外需要注意的是在拼湊sql時要細心,例如如果參數(shù)是String類型時前后一定要加上一對''(具體的取決于所使用的數(shù)據(jù)庫,筆者使用的是 oracle)

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多