Map<String, Object> map一、问题由来

测试环境中进行测试时,某一个接口频繁报一个错,java.lang.Long cannot be cast to java.util.Map。从字面意思理解就是Long类型的数据不能转换为Map集合对象;

之前是查询mysql,现在修改为查询Oracle,所以报了这个错误。正常来说不应该报这个错,可实际情况却是实实在在的报了这个错。
二、问题分析

查看详细错误日志,Service中的异常是这里抛出来的,这种查询数据,处理数据的方式可以参照我写的另外一篇文章 https://www.cnblogs.com/yilangcode/p/13748539.html

用法就不在多赘述。大致作用就是将返回的查询结果集映射成一个map集合,方便其他地方使用。由于之前遇到过类似的操作,就是将查询的结果映射成一个集合,使用mysql

和mybatis的时候,使用小写可以正常映射。可是切换为Oracle后,查询返回的结果中,列是大写,映射为map集合时key和value必须要大写才行,这是通过实践得出的经验。

带着这样的疑问,不知道这次是不是同样的问题,然后开始修复BUG,因为之前也是报类似的错误。
三、解决方案

尝试一:

将之前获Map集合中取数据的方式,修改为通过大写字母获取。测试这种修改方式的结果为查询时没报错,主要是由于本地测试没数据。以为问题解决了,部署到测试环境后,

重新测试仍然报错,而且错误也是一模一样的,说明问题没有解决。后来发现原代码也存在问题,因为使用map.get()方法永远只能获取到value的值,键不能正确获取到。

和同事讨论了一下,发现异常实际上是上图中的Map<String, Object> map = resultContext.getResultObject();这一行代码抛出的。仔细一分析才知道问题的原因:使用

Oracle查询时,返回的数据是只有两列,一列是字符串类型,一列是count()函数统计的 结果为Long类型。Mybatis查询到结果后,不能将Long类型的值映射到

Map<String, Object> 中,所以报错。

尝试二:

使用mybatis查询时,不在直接进行转换,而是先将结果查询出来,然后在将结果手动装入到map集合中,如下图所示。

测试结果完全可行。

注意事项:在使用Mybatis进行查询时,如果想将查询结果直接映射为map集合类型的数据,还是需要慎用,避免出现一些意外的异常。

java.lang.Long cannot be cast to java.util.Map-Oracle查询异常处理的更多相关文章

  1. java.lang.Long cannot be cast to java.lang.Integer解决办法

    情景: mybatis连接oracle 报错: 测试增的时候,报错 Java.lang.Long cannot be cast to  java.lang.Integer:删改没有报错. 排查过程: ...

  2. 利用泛型抽取Dao层,加事务注解问题(java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType)

    想利用泛型抽取BaseDao层,简化操作时出现故障: @Transactional这个注解是能够继承的.于是就想写在抽取的BaseDao层上,让实现的类能够不用写@Transactional,就可开启 ...

  3. Mybatis的失误填坑-java.lang.Integer cannot be cast to java.lang.String

    Mybatis的CRUD小Demo 为方便查看每次的增删改结果,封装了查询,用来显示数据库的记录: public static void showInfo(){ SqlSession session ...

  4. “无效数字” ;java.lang.Integer cannot be cast to java.lang.String

    今天页面上突然查询不出数据,大致的sql语句是 select xx ,xxx from table a where a.lrmb in ( 6101060033, 61010503300, 61016 ...

  5. java.lang.ClassCastException: java.lang.Short cannot be cast to java.lang.String(Short类型无法强转成String类型)

    有一行Java代码如下: String code1 = (String)qTable1.getValueAt(i, 0); 这是一个Java的图形界面获取表格中值的代码,其中qTable1.getVa ...

  6. java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer

    hibernate查询结果条数集 原写法: Integer count = (Integer )session.createQuery(hql).uniqueResult(); 报错:java.lan ...

  7. JSONObject转换Int类型--java.lang.Integer cannot be cast to java.lang.String

    参数 params={"abc":0} JSONObject转换Int类型 JSONObject json = JSONObject.fromObject(params); if ...

  8. ArrayMap java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Object[]

    错误堆栈: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Object[] at android ...

  9. java 解决 java.lang.Integer cannot be cast to java.lang.String

    1.在执行代码打印map的value时,提示错误java.lang.Integer cannot be  cast to java.lang.String,这个错误很明显是类型转换错误 查看表字段的数 ...

  10. java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String

    1.错误描写叙述 java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String service. ...

随机推荐

  1. 14代i5-14600K现身:多核性能提升多达11%

    14代酷睿桌面端还未发售,就陆续在跑分平台上露出. 平台规格为Z790主板.32GB DDR5-5200内存,酷睿i5-14600K的单核成绩为2819,多核成绩为16666,对比酷睿i5-13600 ...

  2. intel更新13代桌面处理器产品线,更多核心更贵价格

    intel 13代酷睿产品线更新带来了更多低于125w TDP的处理器.intel确认了10个65wTDP的SKU和6个35wTDP的SKU.13代酷睿包含新的Raptor Lake和旧的Alder ...

  3. CF526F Pudding Monsters 题解

    题目链接:CF 或者 洛谷 析合树真是连续段问题的降智神器 先看下题目的一些特殊性,每行每列恰好有一个棋子.考虑特殊性,\(n \times n\) 的棋盘,那么就该判断是否有 \(n\) 个棋子,容 ...

  4. webrtc终极版(题外话)辛苦写文章分享,竟然遇到喷子狂喷,写篇文章回怼下,顺便发表下面对喷子的处理方式

    webrtc终极版(题外话)辛苦写文章分享,竟然遇到喷子狂喷,写篇文章回怼下,顺便发表下面对喷子的处理方式 第一篇文章发过后,出人意料的是,收到了博客园某一位用户的狂喷[注:本系列文章会同步发布到cs ...

  5. Spring Boot 参数校验注解(自整理,不停的测试更新)

    首先我们只使用java官方的 javax.validation.constraints ,足以使用了,不使用spring boot 自身的,自身的与官方的一致,可能会有扩展,但是还得引入包,麻烦,只用 ...

  6. .NET 云原生架构师训练营(模块二 基础巩固 MySQL环境准备)--学习笔记

    2.4.1 EF Core -- MySQL环境准备 安装 Docker 配置 docker 镜像仓库国内镜像地址 运行 mysql docker container 通过 Navicate 连接 安 ...

  7. [JVM] Java内存分配

    Java内存分配 程序计数器 程序计数器是一块较小的内存区域,作用可以看做是当前线程执行的字节码的位置指示器.分支.循环.跳转.异常处理和线程恢复等基础功能都需要依赖这个计算器来完成. 虚拟机栈 虚拟 ...

  8. SVC服务的发现

    目录 服务的发现 发现的方式 1. ClusterIP 2. 通过变量 3. 通过DNS(推荐) 服务的发现 发现的方式 服务的发现说的就是svc的ip只有集群内的资源可以访问到,比如集群内的节点,p ...

  9. CF1425F Flamingoes of Mystery 题解

    题目传送门 前置知识 前缀和 & 差分 解法 令 \(sum_k=\sum\limits_{i=1}^{k} a_k\).考虑分别输入 \(sum_2 \sim sum_n\),故可以由于差分 ...

  10. JS LeetCode 566. 重塑矩阵题解分析,数组降维的几种方式

    壹 ❀ 引 今天是过完年到公司的第二天,年前因为封版,到今天我们小组是第一个发版的组,然后就各种踩坑,到现在还在公司等运维解决jenkins问题,闲着也是闲着,做一道算法题,简单记录下解题思路,本题来 ...