0
点赞
收藏
分享

微信扫一扫

问题解决系列:从源码讲解为什么是 'JZ0SL_ Unsupported SQL type 1111'


一、问题场景

正在做代码改造,使用​​mybatis​​​+​​sybase​​进行数据库操作,运行过程中,提示以下报错:

java.io.IOException: JZ0SL: Unsupported SQL type 1111.

本篇博客主要是讲述该解决方案。

问题解决系列:从源码讲解为什么是

二、问题环境

软件

版本

mybatis

3.5.3

sybase驱动

jConnect4


三、问题原因

先总结一下问题原因:

这个问题主要是在​​sybase​​​驱动​​jConnect4​​​出现的。主要原因是:当insert、update语句的变量的值含有null值,就会报错。因为在​​mybatis​​​里面,如果参数出现了null值,则在指定​​jdbcType​​​类型的参数时,​​mybatis​​​默认设置为​​jdbcType.OTHER​​​,导致​​Sybase​​数据库无法识别此格式。

问题解决系列:从源码讲解为什么是


接下来,我们可以看源码:

问题解决系列:从源码讲解为什么是


问题解决系列:从源码讲解为什么是


从上图源码可以看出,是做了判断,如果为空,就取 ​​org.apache.ibatis.session.Configuration#getJdbcTypeForNull​​的值。那这个值是多少,我们切到源码,从下图可以看出:

问题解决系列:从源码讲解为什么是


里面设置了,如果 ​​jdbcType​​​的值为null的时候,就默认使用为 ​​org.apache.ibatis.type.JdbcType#OTHER​​​,其值为​​java.sql.Types#OTHER​​ ,如下图:

问题解决系列:从源码讲解为什么是


问题解决系列:从源码讲解为什么是

问题解决系列:从源码讲解为什么是

四、解决方案


1. 设置对应的类型,如设置字符串类型:

#{resultStr,jdbcType=VARCHAR}


2. 设置默认值,不为空

问题解决系列:从源码讲解为什么是

五、结果

这里我是进行了第一种结果,运行之后,问题解决。

问题解决系列:从源码讲解为什么是

六、总结

遇到问题,除了知道解决方案,为了技术进步,我们也要考虑为什么是这样的报错。这样日积月累,技术能力就会获得长足的进步。

问题解决系列:从源码讲解为什么是

PS:随缘求赞、关注

问题解决系列:从源码讲解为什么是


如果我的文章对大家产生了帮忙,可以在文章底部点个赞或者收藏;

如果有好的讨论,可以留言;

如果想继续查看我以后的文章,可以点击关注

问题解决系列:从源码讲解为什么是


问题解决系列:从源码讲解为什么是

举报

相关推荐

0 条评论