在MyBatis中,是否有任何解决方案在设置空参数时不添加jdbcType?

时间:2015-06-01 07:56:53

标签: java sql mybatis

我正在使用mybatis-3.2.8.jar和JDK 1.6.0_45。

源表名为emp

> EMPNO ENAME   JOB         MGR     HIREDATE            SAL     COMM  DEPTNO  SHORTCUT
> 
> 7499  ALLEN   SALESMAN    7698    1981/02/20 00:00:00 1600    300   30 null

,SQL就是这样:

insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, SHORTCUT)
values
(#{EMPNO},#{ENAME},#{JOB},#{MGR},#{HIREDATE},#{SAL},#{COMM},#{DEPTNO},#{SHORTCUT});

我正在逐行使用这个SQL。选择1行,然后一次又一次插入。或者认为表格只有一行。

然后我面临这个错误:

org.apache.ibatis.exceptions.PersistenceException: 
#### Error updating database.  Cause: org.apache.ibatis.type.TypeException: Error setting null for parameter #7 with JdbcType OTHER . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. Cause: com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=insert into TB_ODS_EMP2(EMPNO,ENAME,JOB,MGR;BEGIN-OF-STATEMENT;<grant>, DRIVER=4.12.55
#### The error may involve pdss5.hs.hdw.ETLTargetMapper.insertTargetTable-Inline
#### The error occurred while setting parameters
#### SQL: insert into TB_ODS_EMP2(EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,SHORTCUT) values(?,?,?,?,?,?,?,?,?) Call getNextException to see the cause
#### Cause: org.apache.ibatis.type.TypeException: Error setting null for parameter #7 with JdbcType OTHER . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. Cause: com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=insert into TB_ODS_EMP2(EMPNO,ENAME,JOB,MGR;BEGIN-OF-STATEMENT;<grant>, DRIVER=4.12.55 

我的负责人不想像这样使用jdbyTYPE

insert into emp
(#{EMPNO},#{ENAME},#{JOB},#{MGR},#{HIREDATE},#{SAL},#{COMM},#{DEPTNO},`#{SHORTCUT,jdbcTYPE=VARCHAR}`)
 ......

在MyBatis中,有没有解决方案在设置空参数时不添加jdbcType?

我认为添加jdbcTYPE=VARCHAR已经足够了,但我的主管讨厌它(也许......)。

2 个答案:

答案 0 :(得分:1)

某些数据库不允许在查询中发送无类型null,因此您应该发送它或从一个数据库供应商切换到另一个数据库供应商,这可能会导致您的SQL失败。

请点击此处获取更多解释:Is jdbcType necessary in a MyBatis mapper?

jdbcType实际上不是MyBatis要求,而是JDBC要求。最好始终为jdbcType参数发送null

答案 1 :(得分:0)

我放弃了。

DB2是超类型数据库。

Oracle可以通过mybatis进行非类型化插入。 Ofcourse在MyBatis中设置了jdbdtypeForNull。

但DB2不是。