2012-08-08 8 views
12

Ich versuche, eine Abfrage für meine Anwendung zu schreiben, aber ich habe einige Probleme. Ich muss als Parameter ein Feld meiner Datenbank zu übergeben, wie:Wie Parameter an Abfrage übergeben?

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

Da WHERE-Klausel und ORDER BY-Klausel dynamisch sind für den Benutzer wählen.

Mit $P{} hat es nicht funktioniert.

+0

@ Alex Wieso hast du das nicht als Antwort gepostet? Scheint, dass beide kombinierten Kommentare dem Benutzer die Antwort geben und Informationen folgen, um mehr zu erfahren. Besser geht es nicht. –

Antwort

22

Es gibt zwei Syntax Ausdrücke für Parameter Referenzierung in Jasper: $P{} und $P!{}.

  • $ P {} paramName Syntax wird unter Verwendung hauptsächlich für die Einstellung WHERE Eingangswerte-Parameter. Der Ersatz-Algorithmus ist "smart", dessen Umsetzung verwendet java.sql.PreparedStatement: für java.lang.String Parameter der Motor $ P {} parameter mit Kurswert ersetzt, für java.lang.Integer - mit numerischen Wert und so weiter.

Die Probe:

 
| Parameter name | Parameter type | Parameter value | 
|:---------------|-------------------|:---------------:| 
| eventName | java.lang.String | Olympic Games | 
| eventType | java.lang.Integer |  2   | 

ursprünglichen Ausdruck (ersetzen):

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

Das Ergebnis wird:

SELECT startDate, endDate, rating FROM events WHERE name='Olympic Games' AND type=2 
  • $ P! {ParamName} -Syntax wird meistens für das "einfache" Ersetzen verwendet.

Die Probe:

 
| Parameter name | Parameter type | Parameter value | 
|:---------------|------------------:|:---------------:| 
| tableName | java.lang.String |  events  | 
| eventName | java.lang.String | Olympic Games | 
| channel  | java.lang.String |  'BBC'  | 
| type   | java.lang.String |  sport  | 

ursprünglichen Ausdruck (ersetzen):

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

Das Ergebnis wird:

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

Für weitere Informationen können Sie diese Using report parameters Post lesen und sich diese Query sample ansehen.


In Ihrem Fall der richtige Ausdruck, wie dies auch sein mag:

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

wo $ P {key} ist ein java.lang.String Parameter

oder wie folgt (es hängt von $ P! {Klausel} Wert)

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

wo $ P {key} ist ein java.lang.String Parameter

-1

wenn Sie mit dem Parameter bestellen müssen versuchen, diese:

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