在 JasperReports 中建立查詢時,您可能需要從使用者傳遞動態參數。為此,有兩種參數引用的語法表達式:$P{}
和 $P!{}
。
$P{}
文法$P{}
語法主要用於在 WHERE 子句中設定輸入參數值。它採用類似 java.sql.PreparedStatement
的「智慧」替換演算法。例如,java.lang.String
參數將被替換為帶引號的值,而 java.lang.Integer
參數將被替換為數值。
例如,考慮以下參數:
参数名称 | 参数类型 | 参数值 |
---|---|---|
eventName | java.lang.String | Olympic Games |
eventType | java.lang.Integer | 2 |
原始表達式(待替換):
<code class="language-sql">SELECT startDate, endDate, rating FROM events WHERE name=$P{eventName} AND type=$P{eventType}</code>
結果將是:
<code class="language-sql">SELECT startDate, endDate, rating FROM events WHERE name='Olympic Games' AND type=2</code>
$P!{}
文法$P!{}
語法主要用於簡單的替換。它對參數值進行逐字替換,沒有任何特殊處理。
例如,考慮以下參數:
参数名称 | 参数类型 | 参数值 |
---|---|---|
tableName | java.lang.String | events |
eventName | java.lang.String | Olympic Games |
原始表達式(待替換):
<code class="language-sql">SELECT startDate, endDate, rating FROM $P!{tableName} WHERE name='$P!{eventName}'</code>
結果將是:
<code class="language-sql">SELECT startDate, endDate, rating FROM events WHERE name='Olympic Games'</code>
根據您的問題,您需要動態設定 WHERE 和 ORDER BY 子句,您可以使用以下表達式:
<code class="language-sql">SELECT name, phone, email FROM company WHERE $P!{clause} = $P{key} ORDER BY $P!{order}</code>
其中 $P{key}
是一個 java.lang.String
參數。如果 $P!{clause}
值需要引號的值,可以改用以下表達式:
<code class="language-sql">SELECT name, phone, email FROM company WHERE $P!{clause} = '$P!{key}' ORDER BY $P!{order}</code>
以上是如何在 JasperReports 查詢中將參數傳遞給 WHERE 和 ORDER BY 子句?的詳細內容。更多資訊請關注PHP中文網其他相關文章!