sql где условие равно true - PullRequest
       4

sql где условие равно true

0 голосов
/ 14 апреля 2020

Здесь where 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); 
    }
}

Приведенный ниже код, когда я так делаю, работает хорошо для любого цвета, который я выбрал из выпадающего списка. Но когда все выбрано из выпадающего списка, оно не показывает результата (конечно, потому что моя база данных не имеет значения «все» для цвета столбца)

//second part
sql.append("select something");
sql.append("where a1.color= :colorParam");
//More statement
query.setParameter("colorParam", color);

Моя проблема в том, что я хочу выбрать все цвета (все записи) из базы данных, когда пользователь выбирает «все» из выпадающего списка, поэтому в первой части я установил where a1.status = true, потому что я хочу, чтобы вернул весь результат , но он закончился up return error.

В журнале выдается сообщение об ошибке:

Не все именованные параметры установлены: [цвет]

Я хочу уточнить, что // код второй детали работает просто так, что он не может ничего показывать, когда все выбрано из выпадающего списка, потому что в моей базе данных нет «всего» для цветного столбца.

Ответы [ 3 ]

1 голос
/ 14 апреля 2020

Этот обходной путь может быть эффективным

Public List<ConclusionBO> getConclusion(String color){
    StringBuilder sql = new StringBuilder();
    sql.append("select something");
    //More statement
    if(!transactionStatus.equals("all")) {
        sql.append("where a1.color= :colorParam");
        query.setParameter("colorParam", color); 
    } 
}

При этом вы добавляете предложение где только тогда, когда есть что фильтровать, и если выбран вариант Все Вы просто выбираете каждый цвет.

0 голосов
/ 14 апреля 2020

Ваш цветной столбец принимает строки. Вы не можете передать ему логическое значение. На мой взгляд, у вас есть два варианта:

Либо добавьте условие для добавления этого:

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

что-то вроде

if(condition for when only one color is neeed)) {
   sql.append("where a1.color= :colorParam");
    } 

больше не требуется, потому что альтернативой является 'all', если вы не хотите фильтровать результаты.

ИЛИ

вы можете изменить запрос с этого

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); 
    }
0 голосов
/ 14 апреля 2020

Добавляйте оператор 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); 
        }
    }
...