2015-10-15 70 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