我正在使用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行,然后一次又一次插入。或者认为表只有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足够好,但是我的酋长讨厌它(也许...)。

最佳答案

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

有关其他说明,请参见此处:Is jdbcType necessary in a MyBatis mapper?

jdbcType实际上不是MyBatis要求,而是JDBC要求。始终发送jdbcType作为null参数的一个好习惯。

关于java - 在MyBatis中,是否有解决方案,在设置空参数时不添加jdbcType?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30568376/

10-11 19:18