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. MedicalGPT:基于LLaMA-13B的中英医疗问答模型(LoRA)

    MedicalGPT:基于LLaMA-13B的中英医疗问答模型(LoRA).实现包括二次预训练.有监督微调.奖励建模.强化学习训练[LLM:含Ziya-LLaMA]. **** 训练医疗大模型,实现包 ...

  2. 文心千帆:PPT 制作、数字人主播一键开播等数十种应用场景惊艳到我了,下面给出简介和使用指南,快去使用起来吧

    文心千帆:PPT 制作.数字人主播一键开播等数十种应用场景惊艳到我了,下面给出简介和使用指南,快去使用起来吧 文心千帆大模型平台是面向企业开发者的一站式大模型开发及服务运行平台.文心千帆不仅提供了包括 ...

  3. 21.9 Python 使用Selenium库

    Selenium是一个自动化测试框架,主要用于Web应用程序的自动化测试.它可以模拟用户在浏览器中的操作,如打开网页.点击链接.填写表单等,并且可以在代码中实现条件判断.异常处理等功能.Seleniu ...

  4. LyScript 验证PE程序开启的保护

    有些漏洞利用代码需要在某个保护模式被关闭的情况下才可以利用成功,在此之前需要得到程序开启了何种保护方式.验证其实有很多方法,其原理是读入PE文件头部结构,找到OPTIONAL_HEADER.DllCh ...

  5. AIX6.1系统NTP同步配置

    前言   当AIX系统的本地时间与时间服务器授出的标准时间误差大于±1000秒时.xntpd服务将无法同步时间并变得无法正常工作,请进行ntp配置前,先修改AIX系统的本地时间,尽量和时间服务器的标准 ...

  6. Mybatis 源码系列:领略设计模式在 Mybatis 其中的应用

    目录 一.Builder模式 二.工厂模式 三.单例模式 四.代理模式 五.组合模式 六.模板方式模式 七.适配器模式 八.装饰器模式 九.迭代器模式 虽然我们都知道有23种设计模式,但是大多停留在概 ...

  7. git~issue在github/gitlab中的使用

    本文档适用于github和gitlab issue介绍 GitHub 中的 issue 功能是一种用于跟踪项目中任务.缺陷.功能请求和讨论的工具.通过 issue,项目成员可以提出问题.报告 bug. ...

  8. Vulkan学习苦旅05:马不停蹄地渲染(创建交换链VkSwapchainKHR)

    通俗地说,渲染图像就是为图像的每个像素选择合适的颜色.例如,如果图像的分辨率为1920x1080,表示图像中有1920x1080个像素,渲染的过程,就是为每个位置的像素计算出合适的颜色.具体来说,假设 ...

  9. C语言无锁高并发安全环形缓冲队列设计(一)

    1.前言 队列,常用数据结构之一,特点是先进先出. 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限 ...

  10. RHEL7安装11204 RAC的注意事项

    最近在某客户的RHEL7 + 11204 RAC环境上测试遇到不少的坑,好在都赶在正式上线前及时发现并处理完毕. 其中两个问题比较典型所以特别记录下:问题都和主机重启后,O相关服务没有自启动导致,看来 ...