JasperReports クエリパラメータの受け渡し
データベース クエリでは、ユーザー入力に基づいてパラメータを動的に転送することが一般的な要件です。一部のユーザーは、$P{}
構文を使用してパラメーターを渡すときに問題が発生する可能性があります。
JasperReports には、パラメーターを参照するための 2 つの構文、$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 中国語 Web サイトの他の関連記事を参照してください。