我们使用iBatis完成了Oracle过程调用。该过程的IN参数之一是过程中的VARCHAR2数据类型,并且是Service / DAO层中的java.lang.String。
只要此输入参数以NULL值传递,过程就会失败。传递值时,将调用该过程而不会出现任何错误。
对于parametermap
中的此过程参数(可以为空),我们将属性设置为jdbctype="java.sql.Types.NULL"
并开始工作。
这是正确的解决方案吗?
使用在Tomcat6服务器中创建的连接池(dbcp)建立数据库连接。
答案 0 :(得分:0)
Ibatis肯定会将NULL值作为参数传递出来。 在我们的插入查询中,我们使用这样的包装器:
insert into table (column1) values (<isNull property="column1">NULL </isNull><isNotNull property="column1">#column1:INT# </isNotNull>)
答案 1 :(得分:0)
对于那些仍然使用旧版本的ibatis(在我的情况下是2.3),传递可空参数时的上述错误可能是由于未在parameterMap中指定jdbcType引起的。在iBatis 2.3.0 User Guide(第27页,参数地图和内联参数 - jdbcType)中有一个指向它的段落。