JasperReports でクエリを構築する場合、ユーザーから動的パラメータを渡す必要がある場合があります。この目的のために、パラメーター参照には $P{}
と $P!{}
という 2 つの構文式があります。
$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 中国語 Web サイトの他の関連記事を参照してください。