我有此表PropertyDetails,其中包含一列“卧室”。在我的GUI中,我有一个筛选器面板,该面板允许用户选择卧室的数量(1,2,3,4,5,6,7,8,9,10),从而使用筛选器显示结果(s)。
我正在使用参数化查询来传递卧室数量作为可以为空的过滤器。 当我使用“ IS NULL”时,我的查询未提供期望的结果,但显示了没有它的准确结果。 当我仅使用此代码时,它可以正常工作并提供所需的输出:
where
(PropertyDetails.bedrooms=?1)
OR
(PropertyDetails.bedrooms=?2)
我已经尝试使用IN()子句,但是它不允许传入参数(如Internet上的研究)。 尝试对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,单个值或多个值。
答案 0 :(得分:0)
您应该重写查询:
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