Ну, я попытался немного усерднее и выяснил, как заставить это работать, передав весь пункт WHERE в параметре $ P {}.
Я просто удалил предложение WHERE целиком и добавил:
$P!{whereClause}
Я поместил туда один параметр и удалил из отчета три параметра $ P {eventoid}, $ P {data1} и $ P {data2}.
Я работаю над Spring MVC и внутри моего класса Controller, в соответствии с отображением запроса POST для этой страницы, я добавил переменную String с именем whereClause и установил ее значение равным "WHERE 1 = 1" (или true, если вы предпочитаете ):
String whereClause = "WHERE 1=1";
if (relIndice.getEventoId() != 0) {
whereClause += " AND evento.id = " + relIndice.getEventoId().toString();
}
if (relIndice.getData1() != null) {
whereClause += " AND evento.data_inicio_realizacao >= '" + relIndice.getData1().toString() + "'";
}
if (relIndice.getData2() != null) {
whereClause += " AND evento.data_inicio_realizacao <= '" + relIndice.getData2().toString() + "'";
}
whereClause += " ORDER BY evento.data_inicio_realizacao";
После установки начального значения для переменной whereClause я сделал 3 оператора IF, каждое для одного из полей, которые я хочу включить в оператор WHERE, в SQL.
Поскольку "WHERE 1 = 1 будет работать в любом случае", перед пробелом И требуется пробел, чтобы создать чистый и работающий синтаксис.
И, наконец, я добавил предложение ORDER BY, которое будет выполняться в любом случае.
И все, значения ваших параметров будут теми значениями, которые вы получите от получателей, которые вы хотите использовать.
В моем случае я могу оставить любые значения равными нулю или нулю (в случае eventoId, поскольку это int), и у меня будут все записи из этой таблицы, так как инструкция SELECT не увидит предложение WHERE ... Coz его не существует!
Спасибо, ребята!