• 项目问题:使用Mybatis对Oracle查询数据记录时,navicat查询有记录,但是mybatis查询返回null


    项目场景:

    提示:这里简述项目相关背景:

    根据指定条件查询Oracle表数据记录。


    问题描述

    使用Mybatis对Oracle查询数据记录时,navicat查询有记录,但是mybatis查询返回null。
    APP 中接收数据代码:

    @Override
    	public void getTPRecord() {
    		TPRecord tp = dao.getTPRecord("sdklK02");
    		log.info(tp);//null
    		//navicat 有记录
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    原因分析:

    • 查询条件的值不一致。
    • 系统使用了不同数据库相同表结构的双数据源。
    • 第一次查询后缓存,其他操作插入记录,导致从缓存获取,为null。

    解决方案1:

    查询条件的值不一致。

    查看和对比查询条件一致,不是该原因。

    解决方案2:

    系统使用了不同数据库相同表结构的双数据源。

    通过idea调试工具查询调用的数据源正常,不是该原因。

    解决方案3:

    第一次查询后缓存,其他操作插入记录,导致从缓存获取,为null

    重启项目,也不行。

    解决方案4:

    想起mybatis 底层原理是jdbc操作,于是通过idea调试工具,手动编写jdbc代码。

    首先使用statement同样的查询条件正常返回记录。
    再次使用PreparedStatement同样的查询条件,返回和mybatis一样为null。
    查询两者差距,对比数据库字段值,发现问题。
    原因为字段值使用char类型,设置长度为10,插入数据长度为6,oracle自动补足4位空格,查询值没有空格,导致查询不到记录。

    Oracle表记录: value -> 456444空格空格空格空格
    查询条件:value = 456444                       
    
    • 1
    • 2

    最终原因:查询条件值不一致,Oracle char类型 会使用空格补足位数

  • 相关阅读:
    Gradle多渠道打包
    【无题】仙女话术
    三十七、【进阶】验证索引的效率
    前后端接口设计与配置中心系统<二十九>-------HiAbility SDK开发3【 扫码能力集成、数据统计与埋点】
    k8s自动化运维九
    Dispose CLose 析构函数 Finalize()
    UE4 粒子特效基础学习 (03-制作上升光线特效)
    GBASE 8s自定义存储过程和函数
    ppt模版免费下载网站大全
    各种级数(调和、几何)总结
  • 原文地址:https://blog.csdn.net/weixin_43340087/article/details/125530895