В вашем коде вы пытаетесь передать имя столбца в качестве аргумента, но это не работает.Вам разрешено передавать значения только для столбцов.Я предлагаю другое решение вашей проблемы.Рассмотрим это более простое утверждение:
String getResults = "SELECT id_housing, name, description_short, price, photo FROM housing
WHERE (city = ? OR 1 = ?)
(1) Если пользователь ввел действительное значение, тогда ваш код будет:
PreparedStatement stmt = con.prepareStatement(getResults);
stmt.setString(1, city_text);
stmt.setString(2, 0);
, поэтому предложение WHERE
выглядит следующим образом:
WHERE (city = city_text OR 1 = 0)
, поскольку 1 = 0
всегда равно false
, оставшаяся часть city = city_text
будет извлекать нужные строки.
(2) Если пользователь ввел значение , а не , тогда ваш код будет:
PreparedStatement stmt = con.prepareStatement(getResults);
stmt.setString(1, "");
stmt.setString(2, 1);
, поэтому предложение WHERE
выглядит так:
WHERE (city = '' OR 1 = 1)
, поскольку 1 = 1
всегда true
, весь логический оператор (city = '' OR 1 = 1)
будет true
, так как он даже не существует.
Таким образом, вы должны проверить введенное или не введенное значение и настроить параметры для передачи в любом случае.Это просто идея, которую вы можете расширить для большего количества столбцов.