2015-10-15 66 views
-1

我需要編寫一個函數,將返回一個'選擇'字符串句子。插入條件與變量選擇字符串只有當變量不爲空

在句子中我只想結合條件,如果變量不爲空。

public String getFilterCondition(Group group) { 


    String sendMail= group.getEmail(); 
    String phone= group.getPhone(); 
    String gender= group.getGender(); 

    return "select * from member where sendMail='"+sendMail+"' and phone='"+phone+"' and gender='"+gender+"'" ; 

} 

只有在變量不爲空的情況下,變量的條件纔會包含在語句中。

我怎麼能做到這一點?

謝謝!

+1

只用if語句,就可以檢查。 –

回答

0

你可以嘗試這樣的事情:

public String getFilterCondition(Group group) { 

    String sendMail = group.getEmail(); 
    String phone = group.getPhone(); 
    String gender = group.getGender(); 
    String concat = "where "; 

    String query = "select * from member "; 
    if (sendMail != null) { 
     query += concat + "sendMail='" + sendMail + "' "; 
     concat = "and "; 
    } 
    if (phone != null) { 
     query += concat + "phone='" + phone + "'"; 
     concat = "and "; 
    } 
    if (gender != null) { 
     query += concat + "gender='" + gender + "'"; 
    } 

    return query; 

} 
+0

偉大!這是最好 – user4858836

+0

我很高興它是有用的,如果你認爲這是正確的答案,請將它作爲標記! –

0

我想以最短(僅當您的列VARCHAR處理)是做這樣的:

return "select * from member where sendMail like " + (sendMail != null ? "'" + sendMail + "'" : "'%'") + " and ..."; 
+0

這會很糟糕。如果sendMail爲空,那麼sendMail應該不在where子句中 – Stultuske

+0

那麼定義'bad'。如果sendMail將爲空,那麼我的查詢將按照它應該的方式工作。問題是關於這麼做的最短途徑,所以我認爲我的解決方案比創建三個不同的if語句更短,並且檢查是否應該添加'和'運算符。 – wawek

+0

「壞」,因爲:不符合要求。此外,僅僅因爲你得到的參數爲空,並不意味着數據庫中的值爲null。 – Stultuske

1

這裏是一個辦法正在做。

public String getFilterCondition(Group group) { 

    String sendMail= group.getEmail(); 
    String phone= group.getPhone(); 
    String gender= group.getGender(); 

    String returnValue = "select * from member "; 
    boolean needWhereClause = true; 
    if ((sendMail != null) && ! sendMail.equals("")) { 
     returnValue = returnValue + (needWhereClause ? "where " : "and "); 
     needWhereClause = false; 
     returnValue = returnValue + "sendMail = '" + sendMail + "' "; 
    } 
    if ((phone != null) && ! phone.equals("")) { 
     returnValue = returnValue + (needWhereClause ? "where " : "and "); 
     needWhereClause = false; 
     returnValue = returnValue + "phone = '" + phone + "' "; 
    } 
    if ((gender != null) && ! gender.equals("")) { 
     returnValue = returnValue + (needWhereClause ? "where " : "and "); 
     needWhereClause = false; 
     returnValue = returnValue + "gender = '" + gender + "' "; 
    } 
    return returnValue; 
} 
+0

根據他的要求,如果它們中的任何一個爲空,你應該返回null。無效或無效;他會繼續。 – user2505019