Я использую Spring jdbcTemplate.update(String sql, Object[] args)
для выполнения подготовленного оператора вставки в базу данных Oracle. Один из объектов — это объект Character, содержащий значение «Y», а целевой столбец имеет тип CHAR(1), но я получаю
java.sql.SQLException: Invalid column type
исключение.
Я отлаживал это вдоль и поперек, и нет никаких сомнений в том, что именно этот конкретный объект вызывает проблему. Вставка выполняется, как и ожидалось, когда этот объект символов опущен.
Я также могу вывести значения sql и Object[], скопировать sql в sql developer, заменить заполнители значений (?'s)
фактическими значениями объектов, и вставка будет работать нормально.
SQL (запутанный, чтобы защитить виновных):
INSERT INTO SCHEMA.TABLE(NUMBER_COLUMN,VARCHAR_COLUMN,DATE_COLUMN,CHAR_COLUMN) VALUES (?,?,?,?);
Значения объекта:
values[0] = [123]
values[1] = [Some String]
values[2] = [2012-04-19]
values[3] = [Y]
Комбинация запускается вручную в sql-разработчике, и это отлично работает:
INSERT INTO SCHEMA.TABLE(NUMBER_COLUMN,VARCHAR_COLUMN,DATE_COLUMN,CHAR_COLUMN) VALUES (123,'Some String','19-Apr-2012','Y');
Сам подготовленный оператор sql генерируется динамически на основе ненулевых объектов переменных экземпляра, содержащихся в объекте передачи данных (мы хотим, чтобы база данных обрабатывала генерацию значений по умолчанию), поэтому я не могу принять никаких ответов, предполагающих, что я просто переделываю sql или процедуру вставки.
Кто-нибудь когда-либо сталкивался с этим и может объяснить мне, что происходит и как это исправить? Разочаровывающе странно, что я не могу вставить объект Character в поле CHAR(1). Любая помощь приветствуется.
С уважением, давний луркер Первый постер