Запрос необязательного параметра с IS NULL не работает должным образом в Java Sqlite - PullRequest
1 голос
/ 15 июня 2019

У меня есть эта таблица 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, одно значение или несколько значений.

1 Ответ

0 голосов
/ 15 июня 2019

Вы должны переписать запрос:

SELECT * FROM PropertyDetails WHERE bedrooms IN(?1, ?2) OR (?1 IS NULL AND ?2 IS NULL)

Объяснение:

bedrooms IN(?1, ?2)
-- if any parameter is provided then filled one are used

OR (?1 IS NULL AND ?2 IS NULL)
-- none of parameter is provided, show all values
...