2012-08-08 14 views
12

Próbuję napisać zapytanie do mojej aplikacji, ale mam pewne problemy. Muszę przekazać jako parametr jednej dziedzinie mojej bazy danych, takich jak:Jak przekazać parametry do zapytania?

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

Ponieważ WHERE i ORDER BY są dynamiczne, aby użytkownik mógł wybrać.

Korzystanie z $P{} nie działa.

+0

@ Alex Dlaczego nie napisałeś tego jako odpowiedzi? Wydaje się, że oba połączone komentarze dają użytkownikowi odpowiedź i informacje uzupełniające, aby dowiedzieć się więcej. Nie ma nic lepszego. –

Odpowiedz

22

Istnieją dwa wyrażenia składnię dla parametru odniesienie w JasperReports: $P{} i $P!{}.

  • $} P {ParamName składni stosuje się głównie do ustawiania GDZIE wejście wartości parametrów. Algorytm wymiana jest "inteligentny", jego realizacja wykorzystuje java.sql.PreparedStatement: dla java.lang.String parametrów silnik zastąpi $ p {ParameterName} z cytowanego wartości, dla java.lang.Integer - z wartością numeryczną i tak dalej.

Próbka:

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

pierwotnego wyrażenia (wymienić)

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

Wynik będzie:

SELECT startDate, endDate, rating FROM events WHERE name='Olympic Games' AND type=2 
  • $ P! {ParamName} składnia używa głównie do robienia "prostego" zamiany.

Próbka:

 
| 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  | 

pierwotnego wyrażenia (wymienić)

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

Wynik będzie:

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

Aby uzyskać więcej informacji, można przeczytać ten post Using report parameters i spojrzeć na to Query sample.


W Twoim przypadku prawo wyrażenie może być tak:

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

gdzie $ P {klucz} jest java.lang.String parametr

lub coś podobnego (zależy od wartości $ P! {Klauzula})

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

gdzie $ P {klucz} jest java.lang.String parametr

-1

jeśli trzeba zamówić przez parametr spróbować tego:

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 
Powiązane problemy