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


    一、问题场景

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

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

    本篇博客主要是讲述该解决方案。
    09B4DB1B.jpg

    二、问题环境

    软件版本
    mybatis3.5.3
    sybase驱动jConnect4

    三、问题原因

    先总结一下问题原因:

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

    09B5B54F.gif
    接下来,我们可以看源码:
    09B73680.jpg
    image.png
    从上图源码可以看出,是做了判断,如果为空,就取 org.apache.ibatis.session.Configuration#getJdbcTypeForNull的值。那这个值是多少,我们切到源码,从下图可以看出:
    image.png
    里面设置了,如果 jdbcType的值为null的时候,就默认使用为 org.apache.ibatis.type.JdbcType#OTHER,其值为java.sql.Types#OTHER ,如下图:
    image.png
    image.png

    09B877BA.png

    四、解决方案

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

    #{resultStr,jdbcType=VARCHAR}
    
    • 1

    2. 设置默认值,不为空

    09B9C47E.gif

    五、结果

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

    六、总结

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

    PS:随缘求赞、关注

    09C382F0.gif
    如果我的文章对大家产生了帮忙,可以在文章底部点个赞或者收藏;
    如果有好的讨论,可以留言;
    如果想继续查看我以后的文章,可以点击关注
    也可以扫描以下二维码,关注我的公众号:枫夜之求索阁,查看我最新的分享!
    image.png
    image.png

  • 相关阅读:
    Unity为什么ios不能热更新
    ConcurrentHashMap 1.7与1.8的区别
    DotNetCore环境离线CentOS安装
    vue:生命周期函数总结
    ESP32 AT指令模式连接百度云天工物接入
    使用knuth Durstenfeld Shuffle置乱关键区域
    2022年12月计划(cesium for unreal源码抄写+各个视频教程,1主+多副)
    209. 长度最小的子数组
    剑指 Offer 68 - 二叉树的最近公共祖先
    防火墙设置
  • 原文地址:https://blog.csdn.net/u013084266/article/details/128153980