15

アプリケーションのクエリを作成しようとしていますが、問題が発生しています。次のように、データベースの1つのフィールドをパラメーターとして渡す必要があります。

SELECT name, phone, email 
FROM company 
WHERE $P{clause} = $P{key}
ORDER BY $P{order}

WHERE句とORDERBY句は、ユーザーが選択できるように動的であるためです。

それを使用$P{}しても機能しませんでした。

4

2 に答える 2

29

JasperReportsのパラメータ参照には2つの構文式があります:$P{}$P!{}

  • $ P {paramName}構文は、主にWHERE入力パラメーター値の設定に使用されます。置換アルゴリズムは「スマート」であり、その実装はjava.sql.PreparedStatementを使用します。java.lang.Stringパラメーターの場合、エンジンは$ P {parameterName}を引用符で囲まれた値に、java.lang.Integerの場合は数値などに置き換えます。 。

標本、見本:

| パラメータ名| パラメータタイプ| パラメータ値|
|:--------------- | ------------------- |:----------- ----:|
| eventName | java.lang.String | オリンピック|
| eventType | java.lang.Integer | 2 |

元の式(置き換える):

SELECT startDate, endDate, rating FROM events WHERE name=$P{eventName} AND type=$P{eventType} 

結果は次のようになります。

SELECT startDate, endDate, rating FROM events WHERE name='Olympic Games' AND type=2 
  • $ P!{paramName}構文は、主に「単純な」置換を行うために使用されます。

標本、見本:

| パラメータ名| パラメータタイプ| パラメータ値|
|:--------------- | ------------------:|:----------- ----:|
| tableName | java.lang.String | イベント|
| eventName | java.lang.String | オリンピック|
| チャンネル| java.lang.String | 'BBC' |
| タイプ| java.lang.String | スポーツ|

元の式(置き換える):

SELECT startDate, endDate, rating FROM $P!{tableName} WHERE name='$P!{eventName}' AND channel=$P!{channel} AND type=$P!{type} 

結果は次のようになります。

SELECT startDate, endDate, rating FROM events WHERE name='Olympic Games' AND channel='BBC' AND type=sport

詳細については、「レポートパラメータの使用」の投稿を読んで、このクエリサンプルを参照してください。


あなたの場合、正しい表現は次のようになります。

SELECT name, phone, email FROM company WHERE $P!{clause} = $P{key} ORDER BY $P!{order}

ここで、$P{key}java.lang.Stringパラメーターです。

またはこのように( $ P!{clause}の値に依存します)

SELECT name, phone, email FROM company WHERE $P!{clause} = $P!{key} ORDER BY $P!{order}

ここで、$P{key}java.lang.Stringパラメーターです。

于 2012-08-09T06:36:20.767 に答える
-1

パラメータで注文する必要がある場合は、次のことを試してください。

SELECT name, phone, email ,(case when $P{order} = 'name' then name when $P{order} = 'phone' then phone else email end) as orderlist
FROM company 
WHERE $P{clause} = $P{key}
ORDER BY orderlist
于 2014-10-24T07:43:53.067 に答える