首頁 >資料庫 >mysql教程 >如何使用 $P{} 和 $P!{} 語法正確地將參數傳遞給 JasperReports 查詢?

如何使用 $P{} 和 $P!{} 語法正確地將參數傳遞給 JasperReports 查詢?

DDD
DDD原創
2025-01-18 06:31:08644瀏覽

How to Properly Pass Parameters to JasperReports Queries Using $P{} and $P!{} Syntax?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn