Java sql where子句等于true

Java sql where子句等于true,java,where-clause,Java,Where Clause,这里的,其中a1.color=true在java中不起作用。当我在下拉列表中选择任何颜色时,都会出现错误 //fist part Public List<ConclusionBO> getConclusion(String color){ StringBuilder sql = new StringBuilder(); sql.append("select something"); sql.append("where a1.color= :colorPara

这里的
,其中a1.color=true
在java中不起作用。当我在下拉列表中选择任何颜色时,都会出现错误

 //fist part
Public List<ConclusionBO> getConclusion(String color){
    StringBuilder sql = new StringBuilder();
    sql.append("select something");
    sql.append("where a1.color= :colorParam");
    //More statement
    if(transactionStatus.equals("all")) {
        query.setParameter("colorParam", true); 
    }else {
        query.setParameter("colorParam", color); 
    }
}
我这里的问题是,当用户从下拉列表中选择“全部”时,我想从数据库中选择所有颜色(所有记录),这就是为什么在第一部分我设置了
,其中a1.status=true
,因为我希望它返回所有结果,但最终返回错误

在日志中,错误消息为:

尚未设置所有命名参数:[颜色]


我想澄清的是//second part code正在工作,只是当从下拉列表中选择all时,它无法显示任何内容,因为我的数据库没有颜色列的“all”。

仅在需要筛选时添加WHERE语句:

    Public List<ConclusionBO> getConclusion(String color){
        StringBuilder sql = new StringBuilder();
        sql.append("select something");
        //More statement
        if(transactionStatus.equals("all")) {
            // do nothing
        }else {
            sql.append("where a1.color= :colorParam");
            query.setParameter("colorParam", color); 
        }
    }
Public List getconsultion(字符串颜色){
StringBuilder sql=新的StringBuilder();
append(“选择某物”);
//更多声明
if(交易状态等于(“全部”)){
//无所事事
}否则{
append(“其中a1.color=:colorParam”);
query.setParameter(“colorParam”,color);
}
}

此解决方法可能有效

Public List getconsultion(字符串颜色){
StringBuilder sql=新的StringBuilder();
append(“选择某物”);
//更多声明
如果(!“all”.equals(交易状态)){
append(“其中a1.color=:colorParam”);
query.setParameter(“colorParam”,color);
} 
}

使用此选项,您只需在有筛选依据时添加where子句,如果所选选项为“全部”,则只需选择每种颜色。

您的颜色列接受字符串。不能向其传递布尔值。 我认为你有两个选择:

为何时追加此项添加条件:

sql.append("where a1.color= :colorParam");
差不多

if(condition for when only one color is neeed)) {
   sql.append("where a1.color= :colorParam");
    } 
不需要其他选项,因为当您不想筛选结果时,可选择“全部”

您可以从以下位置更改查询:

sql.append("where a1.color= :colorParam");
像这样的事情

sql.append("where a1.color IN (:colorParam)");
现在,您可以提供颜色列表,而不是一种颜色。 当您想要返回所有颜色时,您只需要向查询提供所有颜色

String allcolors = 'Red, Green, Blue, etc' /* hardcode all your colors here or  better yet, dynamically populate them */

if(transactionStatus.equals("all")) {
        query.setParameter("colorParam", allcolors); 
    }else {
        query.setParameter("colorParam", color); 
    }
sql.append("where a1.color IN (:colorParam)");
String allcolors = 'Red, Green, Blue, etc' /* hardcode all your colors here or  better yet, dynamically populate them */

if(transactionStatus.equals("all")) {
        query.setParameter("colorParam", allcolors); 
    }else {
        query.setParameter("colorParam", color); 
    }