java.lang.Long cannot be cast to java.util.Map-Oracle查询异常处理
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查询异常处理的更多相关文章
- java.lang.Long cannot be cast to java.lang.Integer解决办法
情景: mybatis连接oracle 报错: 测试增的时候,报错 Java.lang.Long cannot be cast to java.lang.Integer:删改没有报错. 排查过程: ...
- 利用泛型抽取Dao层,加事务注解问题(java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType)
想利用泛型抽取BaseDao层,简化操作时出现故障: @Transactional这个注解是能够继承的.于是就想写在抽取的BaseDao层上,让实现的类能够不用写@Transactional,就可开启 ...
- Mybatis的失误填坑-java.lang.Integer cannot be cast to java.lang.String
Mybatis的CRUD小Demo 为方便查看每次的增删改结果,封装了查询,用来显示数据库的记录: public static void showInfo(){ SqlSession session ...
- “无效数字” ;java.lang.Integer cannot be cast to java.lang.String
今天页面上突然查询不出数据,大致的sql语句是 select xx ,xxx from table a where a.lrmb in ( 6101060033, 61010503300, 61016 ...
- 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 ...
- java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
hibernate查询结果条数集 原写法: Integer count = (Integer )session.createQuery(hql).uniqueResult(); 报错:java.lan ...
- JSONObject转换Int类型--java.lang.Integer cannot be cast to java.lang.String
参数 params={"abc":0} JSONObject转换Int类型 JSONObject json = JSONObject.fromObject(params); if ...
- 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 ...
- java 解决 java.lang.Integer cannot be cast to java.lang.String
1.在执行代码打印map的value时,提示错误java.lang.Integer cannot be cast to java.lang.String,这个错误很明显是类型转换错误 查看表字段的数 ...
- 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. ...
随机推荐
- 【druid切换hikari连接池】通过源码分析遇到的问题
一.前言说明 如果不会配置druid连接池的话,可以参考我这篇博文:springboot整合druid: springboot整合所有的starter方法基本都差不多,添加依赖,开启注解,编写配置,增 ...
- Milvus 2.3.功能全面升级,核心组件再升级,超低延迟、高准确度、MMap一触开启数据处理量翻倍、支持GPU使用!
Milvus 2.3.功能全面升级,核心组件再升级,超低延迟.高准确度.MMap一触开启数据处理量翻倍.支持GPU使用! 1.Milvus 2.3版本全部升级简介 Milvus 2.3.0 不仅包含大 ...
- 释放搜索潜力:基于ES(ElasticSearch)打造高效的语义搜索系统,让信息尽在掌握
释放搜索潜力:基于ES(ElasticSearch)打造高效的语义搜索系统,让信息尽在掌握[1.安装部署篇--简洁版],支持Linux/Windows部署安装 效果展示 PaddleNLP Pipel ...
- Rating 算法
Rating 算法 这是一种 OJ 常用的算法,下面进行介绍 公式 $ Rating $ 的计算公式如下: $ Rating = R + K(P - E) $ 这里 $ R $ 表示当前 $ Rati ...
- DBSAT脚本快速收集方法
DBSAT是Oracle官方提供的脚本,用于数据库的安全评估检查,用户可以放心下载使用. 下载链接具体参见MOS: Oracle Database Security Assessment Tool ( ...
- Flink-SQL数据去重
Flink去重语句 您可以通过多种方式实现去重需求,例如FIRST_VALUE.LAST_VALUE和DISTINCT等.本文为您介绍如何使用TopN方法实现去重,以及使用过程中的注意事项. 去重的方 ...
- 2023年多校联训NOIP层测试6
2023年多校联训NOIP层测试6 打了 \(10min\) 骗分,就溜了. T1 弹珠游戏 \(0pts\) 没听懂讲评,暂时咕了. T2 晚会 \(20pts\) 部分分( \(20pts\) ) ...
- JS 这一次彻底理解选择排序
壹 ❀ 引 我在 JS 这一次彻底理解冒泡排序 一文中介绍了十大经典排序中的冒泡排序,所谓冒泡排序就是不断比较相邻的两个元素,让较小的往前浮,较大的往后沉,直到所有元素找到自己对应的位置.那么现在我们 ...
- XTW100编程器在Win10下的安装
XTW100 这是一个淘宝上卖得很多的经典编程器, 用于写入24和25系列的存储芯片. 最初使用的是stm32f103c8t6, 因为f103价格飞涨, 市面上大都换成国产的兼容mcu了, 软件和使用 ...
- windows网络流量监控
NPCap 官网 https://nmap.org/npcap/ 这是抓包必须先安装的工具,具体的原因可以看 https://github.com/buger/goreplay/wiki/Runnin ...