项目问题:使用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 有记录
	}

原因分析:

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值