2012-08-08 97 views
12

我正在嘗試爲我的應用程序寫一個查詢,但我遇到了一些麻煩。我需要通過我的數據庫的參數的一個領域,如:如何傳遞參數來查詢?

SELECT name, phone, email 
FROM company 
WHERE $P{clause} = $P{key} 
ORDER BY $P{order} 

因爲WHERE子句和ORDER BY子句是動態的用戶選擇。

使用$P{}它沒有工作。

+0

@亞歷克斯你怎麼沒有發佈這個答案?看起來這兩個評論結合起來給用戶提供了答案,並且跟進了解更多信息。沒有比這更好。 – 2012-08-09 03:25:49

回答

22

有在的JasperReports的參數參考兩幅語法表達式:$P{}$P!{}

  • $ P {PARAMNAME}語法使用大多用於設置WHERE輸入參數的值。替換算法是 「聰明」,它的實現使用java.sql.PreparedStatement:爲java.lang.String中參數發動機將取代$ P {}參數名稱加引號的價值,爲java.lang.Integer中 - 帶數值等等。

樣品:

 
| Parameter name | Parameter type | Parameter value | 
|:---------------|-------------------|:---------------:| 
| eventName | java.lang.String | Olympic Games | 
| eventType | java.lang.Integer |  2   | 

原始表達式(替換):

SELECT startDate, endDate, rating FROM events WHERE name=$P{eventName} AND type=$P{eventType} 

其結果將是:

SELECT startDate, endDate, rating FROM events WHERE name='Olympic Games' AND type=2 
  • $ P!{paramName}語法主要用於執行「簡單」替換。

樣品:

 
| Parameter name | Parameter type | Parameter value | 
|:---------------|------------------:|:---------------:| 
| tableName | java.lang.String |  events  | 
| eventName | java.lang.String | Olympic Games | 
| channel  | java.lang.String |  'BBC'  | 
| type   | java.lang.String |  sport  | 

原始表達式(替換):

SELECT startDate, endDate, rating FROM $P!{tableName} WHERE name='$P!{eventName}' AND channel=$P!{channel} AND type=$P!{type} 

其結果將是:

SELECT startDate, endDate, rating FROM events WHERE name='Olympic Games' AND channel='BBC' AND type=sport 

欲瞭解更多信息您可以閱讀這Using report parameters職位,看看這Query sample


在你的情況下,正確的表達可能是這樣的:

SELECT name, phone, email FROM company WHERE $P!{clause} = $P{key} ORDER BY $P!{order} 

其中$ P {}鍵java.lang.String中參數

或者像這樣(取決於$ P!{clause}值)

SELECT name, phone, email FROM company WHERE $P!{clause} = $P!{key} ORDER BY $P!{order} 

其中$ P {}鍵java.lang.String中參數

-1

,如果你需要通過參數命令試試這個:

SELECT name, phone, email ,(case when $P{order} = 'name' then name when $P{order} = 'phone' then phone else email end) as orderlist 
FROM company 
WHERE $P{clause} = $P{key} 
ORDER BY orderlist