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. ...
随机推荐
- Midjourney|文心一格prompt教程[Text Prompt(下篇)]:游戏、实物、人物、风景、动漫、邮票、海报等生成,终极模板教学
Midjourney|文心一格prompt教程[Text Prompt(下篇)]:游戏.实物.人物.风景.动漫.邮票.海报等生成,终极模板教学 场景6:游戏 Prompt 真的越长越好吗? 按照 Mi ...
- 9.9 Windows驱动开发:内核远程线程实现DLL注入
在笔者上一篇文章<内核RIP劫持实现DLL注入>介绍了通过劫持RIP指针控制程序执行流实现插入DLL的目的,本章将继续探索全新的注入方式,通过NtCreateThreadEx这个内核函数实 ...
- 守护线程(Python)
import time from threading import Thread def son(): while True: print('in son') time.sleep(1) def so ...
- Windows 恶意软件数量是 Mac 的 5000 倍,是 Linux 的 36 倍
AV-TEST 是一个独立的测试机构,他们会根据各种标准对操作系统的防病毒和安全软件进行评估和评级,并将测试结果免费提供给用户,帮助用户选择最适合自己的产品.近日,AV-TEST 联合旗下的威胁情报平 ...
- Matrix【未完成】
Matrix The fitrst thing we do,let's kill all the language lawyers. -- Henry VI, Part II The "pr ...
- 小知识:后台执行Oracle创建索引免受会话中断影响
因为客户环境的堡垒机经常会莫名的断开连接,也不是简单的超时,因为有时候即使你一直在操作,也可能会断. 这样对于操作一些耗时长且中途中断可能会导致异常的操作就很危险,而最简单的避免方法就是将其写到脚本中 ...
- HBase-表的压缩
一.如何选择压缩算法以及Data_Block_Encoding?(1)如果Key很长,或者有很多Column,那么推荐使用FAST_DIFF.(2)如果数据是冷数据,不经常被访问,那么使用GZIP压缩 ...
- Python学习之Pytorch
一.如何查看本机是否安装了Pytorch 在Python环境中查看是否安装了PyTorch可以通过几个简单的步骤来完成.这里有一些方法: 使用Python命令行: 打开你的命令行工具(比如Termin ...
- Iot学习笔记记录
前言 2024.1.13 沙青图书馆 甚至一开始打成了2023年.各位新年快乐.有时间会写下2023的年度总结.不过在此要提前开一个博客,记录一下接下来学习Iot安全的记录了.实在是再不学就要被学弟学 ...
- 解决highlightjs中纯文本被解析成HTML无法展示的问题,记一次工作中bug修复的思考
壹 ❀ 引 在本周迭代bug修复工作中,遇到了两个比较头疼的bug(同一个客户所提),bug问题描述也很奇怪,客户表示产品的富文本编辑器里的代码块功能,在纯文本语言模式下贴特定代码进去有的看不见,有的 ...