在我们结合MyBatis框架使用时,发现如下问题,当SQL语句为insert或者update时,如果其变量含有null值,会报错:
###Cause: java.sql.SQLException: JZ006: Caught IOException: java.io.IOException: JZ0SL: Unsupported SQL type xxx.
是由于MyBatis在进行操作的时,会指定jdbcType类型的参数,如果参数为null 其类型默认设置为jdbcType.OTHER,导致数据库无法识别此格式。
解决方法:给参数加上jdbcType可解决(注意大小写) 。
即如图:
因为MyBatis在执行SQL时会自动通过对象中的属性来去给SQL中参数进行赋值,它会自动将Java类型转换成数据库的类型。如果一旦传入的是参数值是null 程序就无法准确判断这个类型应该是什么(是Integer?是VARCHAR?还是别的?),就有可能将类型转换错误,从而报错。
加入jdbcType正是为了解决这样的报错,需要针对这些可能为空的字段,手动指定其转换时用到的类型。
一般情况下,我们只需默认判定所有字段都可为空,即全部手动设置其转换类型即可,而无需去判断其每个字段是否可以为空。
同时还需在mybatis-config.xml文件中进行如下配置,添加settings配置;