Дана строка sql-запроса:
select * from students where ”
Сформируйте часть WHERE этого запроса, используя StringBuilder. Пример данных для фильтрации приведены ниже в виде json-строки. Если значение null, то параметр не должен попадать в запрос.
Пример:
{“name”: “Ivanov”, “country”: “Russia”, “city”: “Moscow”, “age”: “null”}
Напишите свой код в методе answer класса Answer. Метод answer принимает на вход два параметра:
String QUERY – начало SQL-запроса
String PARAMS – JSON с параметрами
java
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Map;
public class Answer {
public static String answer(String QUERY, String PARAMS) {
try {
// Разбор JSON-строки и получение данных
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> params = mapper.readValue(PARAMS, Map.class);
// Создание StringBuilder
StringBuilder whereClause = new StringBuilder();
// Добавление условий WHERE для каждого непустого значения
for (Map.Entry<String, Object> entry : params.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
// Проверка на непустое значение и null
if (value != null && !value.toString().equals("null")) {
if (whereClause.length() > 0) {
// Добавление "AND" перед каждым новым условием (кроме первого)
whereClause.append(" AND ");
}
// Добавление условия "<поле> = '<значение>'"
whereClause.append(key).append(" = '").append(value).append("'");
}
}
// Соединение части WHERE с началом SQL-запроса
if (whereClause.length() > 0) {
QUERY += " WHERE " + whereClause.toString();
}
return QUERY;
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
}
В этом примере используется библиотека jackson для разбора JSON-строки. Метод `answer` принимает начало SQL-запроса (`QUERY`) и JSON-строку с параметрами (`PARAMS`), и возвращает готовую строку SQL-запроса.
В цикле перебираются пары "ключ-значение" из JSON-объекта. Если значение не пустое и не равно "null", то добавляется условие в формате `<поле> = '<значение>'` в StringBuilder. Перед каждым новым условием добавляется "AND" (кроме первого условия). В конце метода, если были добавлены условия, они соединяются с началом SQL-запроса.
Пример использования:
java
public static void main(String[] args) {
String QUERY = "select * from students";
String PARAMS = "{"name": "Ivanov", "country": "Russia", "city": "Moscow", "age": null}";
String sqlQuery = Answer.answer(QUERY, PARAMS);
System.out.println(sqlQuery);
}
Вывод:
select * from students WHERE name = 'Ivanov' AND country = 'Russia' AND city = 'Moscow'
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет