Ошибка при передаче значения NULL в процедуру с использованием iBatis

У нас есть вызов процедуры Oracle, выполненный с использованием iBatis. Одним из параметров IN процедуры является тип данных VARCHAR2 в процедуре и java.lang.String на уровнях Service/DAO.

Процедура завершается ошибкой всякий раз, когда этот входной параметр передается со значением NULL. При передаче значения процедура вызывается без ошибок.

Для этого параметра процедуры (который может принимать значение NULL) в parametermap мы установили атрибут как jdbctype="java.sql.Types.NULL", и он начал работать.

Это правильное решение?

Соединение с базой данных устанавливается с использованием пула соединений (dbcp), созданного на сервере Tomcat6.


person yathirigan    schedule 16.08.2012    source источник


Ответы (2)


У Ibatis наверняка есть проблемы со значениями NULL, передаваемыми в качестве параметров. В нашем запросе на вставку мы используем такую ​​оболочку:

insert into table (column1) values (<isNull property="column1">NULL </isNull><isNotNull property="column1">#column1:INT# </isNotNull>)
person Olesia    schedule 05.09.2012
comment
это работает для встроенного отображения параметров. но как вы справляетесь, когда отображение выполняется с помощью тега параметра? - person yathirigan; 08.09.2012
comment
Что вы подразумеваете под тегом параметра? В приведенном выше примере column1 является свойством класса, определенного в теге parameterClass. Например, ‹insert id=insertStatement parameterClass=com.company.YourClass› или ‹insert id=insertStatement parameterClass=java.util.Map›. В последнем случае вы заполните карту своими параметрами и передадите эту карту в ibatis. - person Olesia; 13.09.2012
comment
под тегом параметра я имел в виду следующее ‹!-- Для вызова хранимой процедуры. --› ‹procedure id=getEmpInfo resultClass=Employee parameterMap=getEmpInfoCall› { call getEmp( #acctID# ) } ‹/procedure› ‹parameterMap id=getEmpInfoCall class=map› ‹parameter property=acctID jdbcType=INT javaType=java.lang .Integer mode=IN/› ‹/parameterMap› - person yathirigan; 18.09.2012

для тех, кто все еще использует старую версию ibatis (2.3 в моем случае), вышеуказанная ошибка при передаче параметров, допускающих значение NULL, может быть вызвана тем, что не указан jdbcType в параметреMap. есть отрывок в Руководстве пользователя iBatis 2.3.0 (стр. 27, Карты параметров и встроенные параметры — jdbcType), указывая на это.

person hello_earth    schedule 27.02.2018