Come passare parametri per interrogare?

Sto cercando di scrivere una query per la mia domanda, ma ho qualche problema. Ho bisogno di passare come parametro un campo del mio database, come:

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

Perché la clausola WHERE e la clausola ORDER BY sono dinamici perché l’utente possa selezionare.

Usando $P{} non ha funzionato.

Esistono due espressioni di syntax per il riferimento ai parametri in JasperReports : $P{} e $P!{} .

  • La syntax $ P {paramName} viene utilizzata principalmente per impostare i valori dei parametri di input WHERE . L’algoritmo di sostituzione è “intelligente”, la sua implementazione utilizza java.sql.PreparedStatement : per il parametro java.lang.String il motore sostituirà $ P {parameterName} con valore quotato, per java.lang.Integer – con valore numerico e così via .

Il campione:

 |  Nome del parametro |  Tipo di parametro |  Valore del parametro |
 |: --------------- | ------------------- |: ----------- ----: |
 |  eventName |  java.lang.String |  Giochi olimpici |
 |  eventType |  java.lang.Integer |  2 |

Espressione originale (da sostituire):

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

Il risultato sarà:

 SELECT startDate, endDate, rating FROM events WHERE name='Olympic Games' AND type=2 
  • La syntax $ P! {ParamName} si usa principalmente per fare la sostituzione “semplice”.

Il campione:

 |  Nome del parametro |  Tipo di parametro |  Valore del parametro |
 |: --------------- | ------------------: |: ----------- ----: |
 |  tableName |  java.lang.String |  eventi |
 |  eventName |  java.lang.String |  Giochi olimpici |
 |  canale |  java.lang.String |  'BBC' |
 |  tipo |  java.lang.String |  sport |

Espressione originale (da sostituire):

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

Il risultato sarà:

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

Per ulteriori informazioni è ansible leggere questo Utilizzo dei parametri del report post e guardare questo esempio di query .


Nel tuo caso l’espressione corretta potrebbe essere così:

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

dove $ P {chiave} è un parametro java.lang.String

o come questo (dipende dal valore $ P! {clausola} )

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

dove $ P {chiave} è un parametro java.lang.String

se hai bisogno di ordinare per parametro prova questo:

 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