2016-08-18 53 views
1

我有以下DAO方法:Java本機SQL查詢時輸入參數爲空顯示所有值

public String getSomeTable(final String param1) { 
    String sqlString = "select * from table where name ilike ?"; 
    Query query = this.getEntityManager().createNativeQuery(sqlString); 

    query.setParameter(1, "%param1%"); 
} 

如果param1null或空的話,我想從表中選擇所有條目。什麼是正確的方法來做到這一點?我目前在使用以下軟件:

public String getSomeTable(final String param1) { 
    String sqlString = "select * from table where name = ?"; 
    Query query = this.getEntityManager().createNativeQuery(sqlString); 

    if(param1 == null) 
     query.setParameter(1, "%%"); 
    else 
     query.setParameter(1, "%param1%"); 
} 

但這是不可縮放的。我有像整數,日期等數據類型,我想知道是否有一種方法來跳過檢查該參數,如果它是null。我打算使用COALESCE(?, CASE WHEN?=''THEN'%%'ELSE'%?%'),但我想呢?只能用於特定參數一次。下一個>我寫的是第二個參數。

+1

的可能的複製[SQL查詢,如果參數爲NULL選擇所有(http://stackoverflow.com/問題/ 13474207/sql-query-if-parameter-is-null-select-all) – Julian

+0

該表是否允許空列值?如果是的話,是否需要將查詢改爲:select * from table where name is null –

+0

您正在使用哪個數據庫? – Julian

回答

0

在SQL Server中,我用這樣的事情,也許你可以把它翻譯成Postgres的:

DECLARE @variable INT = NULL; 

SELECT * 
FROM sysobjects 
WHERE 
(1 = CASE WHEN @variable IS NULL THEN 1 ELSE 2 END) 
OR 
(id LIKE @variable); 
+0

爲什麼不簡單:'WHERE @variable IS NULL或id = @ variable'? – Shnugo

+0

@Shnugo - 甚至更簡單:'WHERE id = COALESCE(@ variable,id)'? – Nicarus

+0

這是我的第一個想法,顯然有更簡單的想法。 – udog