Мне было интересно, есть ли более элегантный способ выполнять запросы IN () с помощью Spring JDBCTemplate. В настоящее время я делаю что-то подобное:
StringBuilder jobTypeInClauseBuilder = new StringBuilder();
for(int i = 0; i < jobTypes.length; i++) {
Type jobType = jobTypes[i];
if(i != 0) {
jobTypeInClauseBuilder.append(',');
}
jobTypeInClauseBuilder.append(jobType.convert());
}
Что довольно больно, так как, если у меня есть девять строк только для построения предложения для запроса IN (). Я хотел бы иметь что-то вроде подстановки параметров готовых операторов
WHERE NOT EXISTS (SELECT ...)
.Я делаю запрос «в предложении» с пружиной jdbc следующим образом:
источник
Если вы получаете исключение для: Неверный тип столбца
Пожалуйста, используйте
getNamedParameterJdbcTemplate()
вместоgetJdbcTemplate()
Обратите внимание, что вторые два аргумента меняются местами.
источник
Обратитесь сюда
написать запрос с именованным параметром, использовать простой
ListPreparedStatementSetter
со всеми параметрами в последовательности. Просто добавьте ниже фрагмент кода, чтобы преобразовать запрос в традиционной форме на основе доступных параметров,источник
С 2009 года многое изменилось, но я могу только найти ответы о том, что вам нужно использовать NamedParametersJDBCTemplate.
Для меня это работает, если я просто делаю
используя SimpleJDBCTemplate или JDBCTemplate
источник
listeParamsForInClause
может быть экранировано и делает вас уязвимыми для SQL-инъекций.