日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

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

 昵稱9552892 2013-09-04
Eclipse Birt可以使用sql query來(lái)創(chuàng)建數(shù)據(jù)集,通過(guò)在報(bào)表中設(shè)置參數(shù)(Parameter)來(lái)傳遞客戶端的用戶輸入,同時(shí)可以設(shè)置data set參數(shù)并且與報(bào)表參數(shù)關(guān)聯(lián)(這兩個(gè)參數(shù)是不同的),這樣可以將客戶端的用戶輸入傳遞給data set的參數(shù)供sql query的where語(yǔ)句使用,這是通常的創(chuàng)建sql語(yǔ)句的做法,但是種方法只適合固定的sql語(yǔ)句,對(duì)于動(dòng)態(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 = ?  

定義兩個(gè)報(bào)表參數(shù)SecondName,Sex定義兩個(gè)data set參數(shù)secondname,sex并與報(bào)表參數(shù)關(guān)聯(lián),用戶查看報(bào)表時(shí)必須要輸入姓和性別作為查詢條件,如果不輸則對(duì)應(yīng)的參數(shù)值就是null,假如查 姓李的人,性別不輸,則sql語(yǔ)句就變成這樣select ... from ... where user.second_name = '李' and user.sex = null 顯然這樣的sql是查不出結(jié)果的,哪有sex是null的人呢?對(duì)于這種情況應(yīng)該是如果用戶某一個(gè)參數(shù)不輸則不將它做為查詢條件,上面的sql應(yīng)該變成 select ... from ... where user.second_name = '李'就合理了,把所有姓李的人不分男女都查出來(lái),這就需要使用動(dòng)態(tài)sql語(yǔ)句了,方法有兩種:
一、date set編輯器中有property binging的屬性,可以在右邊的query text框中設(shè)輸入sql語(yǔ)句,或者用expression生成器輔助生成sql語(yǔ)句,上面的例子用種方法應(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ū)別在于:第一種方法是在報(bào)表run的時(shí)候創(chuàng)建data set,因此在data set編輯器里是沒(méi)有辦法像通常那樣預(yù)覽的 而第二種方法是寫在data set的beforeOpen中的,所以在打開data set之前會(huì)創(chuàng)建data set因此可以像通常那樣預(yù)覽數(shù)據(jù)集結(jié)果等等
第一種方法中用param["sex"].value獲得Sex參數(shù)值,而第二種方法需要利用reportContext來(lái)獲取Sex參數(shù)的值
另外需要注意的是在拼湊sql時(shí)要細(xì)心,例如如果參數(shù)是String類型時(shí)前后一定要加上一對(duì)''(具體的取決于所使用的數(shù)據(jù)庫(kù),筆者使用的是 oracle)

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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多