簡體   English   中英

IS NULL的可選參數查詢在Java Sqlite中無法按預期工作

[英]Optional Parameter query with IS NULL not working as expected in Java Sqlite

我有此表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,單個值或多個值。

您應該重寫查詢:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM