一、问题场景
正在做代码改造,使用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:随缘求赞、关注
如果我的文章对大家产生了帮忙,可以在文章底部点个赞或者收藏;
如果有好的讨论,可以留言;
如果想继续查看我以后的文章,可以点击关注
也可以扫描以下二维码,关注我的公众号:枫夜之求索阁,查看我最新的分享!