Использование подготовленного оператора и переменной bind Order By в Java с драйвером JDBC
Я использую
Конечно, это не работает, потому что привязки переменных не должны указывать имена столбцов только значения параметров для выражений в запросе.
Итак... как люди решают эту проблему? Просто выполнение сортировки в Java-коде кажется легким решением, но поскольку я получаю переменную строку для столбца для сортировки, а переменная, сообщающая мне порядок сортировки..., что уродливое число условий компаратора обложка. Это похоже на то, что это должна быть общая проблема с общим шаблоном для ее решения...
Ответы
Ответ 1
Заместители ?
могут использоваться только для значений параметров, но не по направлениям столбцов и порядков сортировки. Таким образом, стандартный способ сделать это, как указано, например, здесь - использовать String # format() или что-то похожее на добавление колонки имя и порядок в вашем запросе.
Другим вариантом является использование Spring Data JPA, где вы можете передать вашему методу в качестве аргумента экземпляр типа Sort который может содержать всю необходимую информацию для сортировки базы данных.
Ответ 2
Я бы просто конкатенацию имени столбца и порядка SQL-запроса, но только после
- подтверждение того, что имя и порядок столбцов действительны в этом контексте.
- санировать их, чтобы противостоять любой попытке атаки SQL Injection.
Я считаю, что это эффективно по сравнению с получением результатов на прикладном уровне и их сортировкой здесь.