Как собрать запрос по частям?

227
20 апреля 2017, 15:15

У меня есть такой запрос:

StringBuffer sqlQueryBuffer = new StringBuffer("SELECT DISTINCT email " +
                                "FROM prod01.events " +
                                "WHERE (event_date BETWEEN toDate(?) AND toDate(?) + 1) ");

При некоторых условиях к нему добавляются некоторые данные. Например:

if (!urlHost.isEmpty()) {
    sqlQueryBuffer.append(" AND url_host = ? ");
}

В итоге крайней неудобно получается выполнять полный запрос:

    SqlRowSet sqlRowSet;
    if (!urlHost.isEmpty()) {
        sqlQueryBuffer.append(" AND url_host = ?");
        sqlRowSet = jdbcTemplate.queryForRowSet(
                sqlQueryBuffer.toString(), fromDate.toString(), toDate.toString(), urlHost
        );
    } else {
        sqlRowSet = jdbcTemplate.queryForRowSet(
                sqlQueryBuffer.toString(), fromDate.toString(), toDate.toString()
        );
    }

Все становится еще хуже, если параметров в WHERE прибавляется. Что делать в такой ситуации ? Могу ли я как-то формировать текст запроса по частям ?

Answer 1

Можешь использовать форматирование строк. К примеру:

String text = String.format("The value is between %s and %s", value1, value2);
READ ALSO
Java Jre в переносимом exe

Java Jre в переносимом exe

Пытаюсь разобраться с примером, представленным здесь как правильный ответЧто я понял

179
Использование Java Stringer Obfuscator и onejar maven plugin

Использование Java Stringer Obfuscator и onejar maven plugin

Для сборки проекта использую onejar maven plugin,соответственно получается 2 jar файла,первый создает плагин,а второй лежит внутри и собственно является...

239
Не инициализируеться значение int number1

Не инициализируеться значение int number1

Данная программа являеться игрой в рулетку, В этом блоке игрок выберает на что ставит, на int или на string Выбор игрока определит int number1 или string...

162
JSONP request to java

JSONP request to java

При нажатии кнопки я хочу отправить реквест на другой порт, насколько я понял, я несмогу сделать этого с помощью ajax, и начал с помощью JSONPМой...

153