您的位置:首页 > 数据库 > Oracle

oracle数据库查询,sql没问题,数据库也有数据,方法没错,项目运行就是查不出数据

2017-12-12 21:18 876 查看
这是我参与做的第一个商业项目,采用的是springboot+   mybatis-plus开发的。数据库采用的是oracle。

这天我做了一个方法是根据两个字段查询数据库的数据列表,其中一个字段是类型(type) 。方法很简单,不一会儿就做出来了,这里不得不感叹mybatis-plus的强大,代码量很小!接下来就是测试了,由于数据库已经有一条测试数据,所以直接启动项目进行测试,可是结果查不出结果,页面不报错,控制台也没有报错只是说查询结果为空。

接下来就是排查过程了,查看数据库数据 确实有数据,把控制台打印出来的sql放到数据库中运行,能查到结果,debug断点测试,参数能正常传入!难道是方法错了?刚好同项目组有个同事 叶子做类似的一个方法 也是根据两个字段查询数据库的数据列表,并且也有一个字段是类型(type),我们这个项目数据库都是有同一个同事设计的,所以type的类型都是一样的 。可是同事做的类似的方法却能查出来数据。因为是用的mybatis-plus的条件构造器,所以,方法几乎一样。所以方法应该也没问题。各种方法都试过了没有答案!刚好这时候同事的第二个累死的方法做出来也是查不出来数据,也是相同的情况,参数中有一个type。会不会问题就出在这个type上啊,然后我吧type参数去掉用另外一个参数查询,结果是可以查到数据。那么问题出来了,就是出在这个type上了!

仔细研究一下这几个entity中的type属性 没什么问题,会不会是数据库有问题啊 ?基于对设计数据库同事技术的信任,加之之前数据库意志没出现过问题,所以之前一直没往这方面考虑,仔细研究发现每个表中type字段的数据类型是char(6),定长六位字符,于是豁然开朗!我这同事 是“智者千虑,偶有一失”啊。我的数据库表中存储的type值只可能是四个,即 1.2.3.4,代表四种类型。都不足六位字符,所以被空格补齐,难怪查不出数据!

解决办法:

1.沟通构建数据库的同事,把type类型更改为varchar(),并且删除之前的测试数据 ,重新录入测试数据

2.数据库不做更改,但是在sql语句中 where之后的出问题的条件字段做处理  如我的处理方法: 。。。where  trim(type)=#{type} 。。。(该方法不适用mybatis-plus的条件构造器,适用手写的sql)

第一次写博客  有什么错误 欢迎大神批评指正。谢谢!望大家避免类似的坑。同时祝各位大神程序畅行一路无bug!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐