JasperReports 查詢參數傳遞
資料庫查詢中,依照使用者輸入動態傳遞參數是常見需求。使用 $P{}
語法傳遞參數時,有些使用者可能會遇到問題。
JasperReports 提供兩種語法來引用參數:$P{}
和 $P!{}
。
$P{paramName}
文法$P{paramName}
主要用於設定 WHERE 子句的輸入參數值。此語法的替換演算法類似於 java.sql.PreparedStatement
。它聰明地處理不同參數類型:
java.lang.String
型態參數,引擎會將 $P{parameterName}
替換為引號的值。 java.lang.Integer
型態參數,引擎會將 $P{parameterName}
替換為數值。 参数名称 | 参数类型 | 参数值 |
---|---|---|
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!{paramName}
文法$P!{paramName}
語法執行簡單的替換,通常用於替換參數的精確值。
参数名称 | 参数类型 | 参数值 |
---|---|---|
tableName | java.lang.String | events |
eventName | java.lang.String | Olympic Games |
channel | java.lang.String | 'BBC' |
type | java.lang.String | sport |
原始表達式:
<code class="language-sql">SELECT startDate, endDate, rating FROM $P!{tableName} WHERE name='$P!{eventName}' AND channel=$P!{channel} AND type=$P!{type}</code>
結果:
<code class="language-sql">SELECT startDate, endDate, rating FROM events WHERE name='Olympic Games' AND channel='BBC' AND type=sport</code>
對於給定的查詢,以下表達式可能適用:
$P{key}
是 java.lang.String
型態參數:<code class="language-sql">SELECT name, phone, email FROM company WHERE $P!{clause} = $P{key} ORDER BY $P!{order}</code>
$P{key}
是非字串型別參數:<code class="language-sql">SELECT name, phone, email FROM company WHERE $P!{clause} = $P!{key} ORDER BY $P!{order}</code>
以上是如何使用 $P{} 和 $P!{} 語法正確地將參數傳遞給 JasperReports 查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!