Se pueden utilizar parámetros en las consultas SQL para filtrar los registros en la condición where o para añadir o sustituir elementos de la consulta SQL o incluso pasar toda la cadena SQL para ejecutar. Tenemos dos posibilidades:
- En el primer caso los parámetros se utilizan como parámetros estándar SQL, por ejemplo:
select nombre, direccion from clientes where Ciudad = $P{nombre_ciudad}
En este ejemplo, nombre_ciudad es un parámetro de tipo java.lang.String (Text)
que contiene el nombre de la ciudad debe seleccionar. Este parámetro se puede pasar al informe desde la aplicación que lo ejecuta para seleccionar sólo una ciudad específica.
El parámetro aquí es un verdadero parámetro SQL, lo que significa que la consulta se ejecutará mediante una sentencia como la siguiente:
select nombre, direccion from clientes where Ciudad = ?
y el valor del parámetro nombre_ciudad entonces pasa a la instrucción.
- El segundo caso se trata de construcciones como:
SELECT * FROM clientes ORDER BY $P!{campos}
El parámetro será tratado como un campo de SQL. JasperReports tendrá en cuenta este parámetro como una especie de marcador de posición (ten en cuenta la sintaxis especial de $P!{}
), que será reemplazado por el valor de texto del parámetro (que en este caso puede ser, por ejemplo, "Fecha_pedido DESC
").
Con la misma lógica, una consulta puede pasarse íntegramente mediante un parámetro del siguiente modo:
$P!{mi_consulta}
El número de parámetros en una consulta es arbitrario. Al pasar un valor utilizando la sintaxis $P!{}
, el valor del parámetro se toma tal cual, el usuario es responsable de la exactitud del valor pasado: la resolución de la sentencia SQL no se realiza por JasperReports en este caso.
Cuando se utilizan parámetros en una consulta, para que iReport pueda recuperar los campos disponibles de la consulta, se debe fijar un valor por defecto para el parámetro.