2012-10-26 51 views
2

我正在創建JR嵌入式報表sql查詢作者:iReport 4.5.0如何將可選參數傳遞給報告?

我已經在Query中添加了參數。但我希望給予靈活性,以便用戶可以傳遞參數或不能傳遞參數,以便相同的報告可以與我的Web應用程序一起工作。

任何人都可以告訴我如何使我的報告非常靈活,以便用戶可以或不能傳遞參數。

我修改了的queryString這樣的:

SELECT columnA, ColumnB FROM Table WHERE Table."columnA" = $P!{} 

iReport的未能生成報告。

+0

你可以看看[傳遞一個「where條件」到jasperreports導出pdf](http://stackoverflow.com/questions/12081601/passing-a-where-condition-to-jasperreports-exporting-pdf),[ JasperReports:傳遞參數查詢](http://stackoverflow.com/q/11871042/876298)&[JasperReports:如何添加一個WHERE語句在SQL查詢取決於布爾參數?](http://stackoverflow.com/q/12889023/876298)posts –

回答

5

我通常遵循以下模式:像你一樣定義$ P {MyParam}。然後加入$ P {MyParam_SQL}像這樣的默認值:

$P{MyParam} == null ? "1=1" : "columnA = '" + $P{MyParam} + "'" 

,並在報告的SQL是這樣的:

SELECT columnA, ColumnB 
FROM table 
WHERE 
    some_filters 
    AND $P!{MyParam_SQL} 
    AND some_other_stuff 

這不是從根本上不同於其他兩個參考答案。但我覺得這很容易理解和維護。

+0

感謝您的回覆。但它可能是性能問題。有可能我們可以忽略Jasper報告中的where子句中的空白參數 –

+0

是什麼讓你認爲它可能是一個性能問題?你當然可以將它轉換爲空字符串而不是'1 = 1'。只需要在需要的地方生成「AND」關鍵字就要更加小心。但性能將是相同的。 – mdahlman

+0

讓我們假設,如果用戶給出任何參數爲空,那麼我們將去'1 = 1',它將獲取該特定列的所有記錄。是不是? –

0

你可以嘗試傳遞整個where子句作爲參數。這樣,如果沒有給出參數,則整個子句被省略,查詢仍然有效。

你只需要準備好你的輸入是這樣的:

String whereClause = null 
if (inputString != null && inputString != ""){ 
    whereClause = "Where Table.\"columnA\" = \"" + inputString + "\""; 
} 

傳遞作爲參數傳遞給您的報告,然後將查詢更改爲:

Select columnA,ColumnB From Table $P!{whereClause} 
+0

感謝GenericJon的回覆,但是這種方法對我不起作用,因爲我不能告訴用戶把where子句給我 –

1

您需要重組你的SQL查詢來做到這一點。從本質上講具有設置爲null的參數,寫你的查詢類似的默認值:

Select columnA,ColumnB From Table Where ($P!{} IS NULL OR Table."columnA" = $P!{}) 

如果傳遞的值在參數查詢將其比作柱,如果是的話基本上是空它只會評估爲真,並跳過第二部分。

+0

對不起,但我無法查詢你能否請探索謝謝 –

相關問題