java.sql.SQLException: неверный тип столбца для запроса на обновление с предложением In в jdbcTemplate - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь обновить строку таблицы Oracle, используя jdbcTemplate, следующим образом

String sql = "update EVENTS set status = null where TEMP_ID IN (select TEMP_ID from EVENTS where STATUS = 'COMPLETE' and EXCHANGE_ID IN (?)   )";    
Map<String, Object> paramMap = new HashMap<String, Object>();
List<Long> longValues = new ArrayList<Long>();
longValues.add(1);
longValues.add(2);
paramMap.put("EXCHANGE_ID", longValues);
int rowsAffected = this.jdbcTemplate.update(sql,paramMap,Long.class);

, где EXCHANGE_ID - это столбец в таблице EVENTS с типом данных NUMBER (6,0).

КогдаЯ пытаюсь запустить вышеуказанную программу, она выдает исключение следующим образом

PreparedStatementCallback;исключение из категории SQLException для SQL [обновить СОБЫТИЯ установить состояние = ноль, где TEMP_ID IN (выберите TEMP_ID из СОБЫТИЙ, где STATUS = 'COMPLETE' и EXCHANGE_ID =?)];Состояние SQL [99999];код ошибки [17004];Неверный тип столбца;вложенным исключением является java.sql.SQLException: недопустимый тип столбца

Редактировать: Количество параметров в предложении In не является фиксированным.поэтому число параметров может быть 2, 3 в зависимости от пользователя.

для простоты я добавил следующие строки в коде

longValues.add(1);
longValues.add(2);

На самом деле я получаю параметры из формы.Я только что добавил часть кода в свой вопрос.

Из-за некоторых ограничений я могу использовать только?в моем параметре место в моем sql запросе нет: EXCHANGE_ID

1 Ответ

0 голосов
/ 11 февраля 2019

Обновлено: вам нужно использовать : EXCHANGE_ID в предложении SQL:

final String sql = "update EVENTS set status = null where TEMP_ID IN (select TEMP_ID from EVENTS where STATUS = 'COMPLETE' and EXCHANGE_ID = :EXCHANGE_ID)";

final MapSqlParameterSource params = new MapSqlParameterSource();
params.put("EXCHANGE_ID", Long.valueOf(1));

int rowsAffected = this.jdbcTemplate.update(sql, params);
...