У меня есть эта таблица PropertyDetails, которая содержит столбец «спальни».В моем графическом интерфейсе у меня есть панель фильтров, которая позволяет пользователю выбрать количество спален (1,2,3,4,5,6,7,8,9,10) и, следовательно, отобразить результаты с помощью фильтра.(s).
Я использую параметризованный запрос, чтобы передать количество спален в качестве фильтра, который может быть нулевым.Мой запрос не дает желаемого результата, когда я использую "IS NULL", но показывает точные результаты без него.Когда я использую только этот код, он работает нормально и выдает желаемый результат:
where
(PropertyDetails.bedrooms=?1)
OR
(PropertyDetails.bedrooms=?2)
Я уже пытался использовать предложение IN (), но он не позволяет передавать параметр (как исследовано в Интернете),Пробные комбинации AND, OR.
Это запрос, который я хочу выполнить, поскольку параметры могут иметь нулевое значение (может быть не проверено).Но он возвращает ожидаемый результат только тогда, когда проверены оба 1bhk и 2bhk И показывает все результаты, когда отмечен только один из них.
PreparedStatement stmt=conn.prepareStatement(
"Select * from PropertyDetails
where
(PropertyDetails.bedrooms=?1 OR ?1 IS NULL)
OR
(PropertyDetails.bedrooms=?2 OR ?2 IS NULL)");
stmt.setString(1,(bhk1));
stmt.setString(2, bhk2);
rs=stmt.executeQuery();
Первоначально
bhk1=null;
bhk2=null;
//If the user checks the 1bhk box, bhk1 string is set to 1 and when the user checks 2bhk box, bhk2 string is set to 2 i.e :
if(1bhkbox.isSelected())
bhk1="1";
if(2bhkbox.isSelected())
bhk2="2";
Если фильтр не выбранЯ хочу показать все записи.Если выбран один фильтр, я хочу показать все записи с этим значением фильтра (bhk).Если выбрано несколько фильтров (например, 1bhk и 2 bhk оба проверены), я хочу показать все записи, для которых значение PropertyDetails.Bedrooms равно 1 или 2. Пользователь может выбрать один или несколько вариантов спальни или ни одного.Следовательно, это может быть NULL, одно значение или несколько значений.