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. ...
随机推荐
- 4.基于Label studio的训练数据标注指南:情感分析任务观点词抽取、属性抽取
情感分析任务Label Studio使用指南 1.基于Label studio的训练数据标注指南:信息抽取(实体关系抽取).文本分类等 2.基于Label studio的训练数据标注指南:(智能文档) ...
- 2.7 CE修改器:多级指针查找
在本步骤中,你需要使用多级指针的概念来查找健康值真正的地址并修改它.多级指针就是一个指针的指针,也就是第一个指针指向第二个指针,第二个指针指向第三个指针,以此类推,最终指向你想要访问的地址. 首先,你 ...
- Python 字符串与字节数组转换
整数之间的进制转换: 10进制转16进制: hex(16) ==> 0x10 16进制转10进制: int('0x10', 16) ==> 16 类似的还有oct(), bin() 字符串 ...
- Centos安装Python3.8
最直白的centos8安装python3.8yum install -y update安装 gcc和make插件:yum install gcc gcc-c++yum -y install gcc a ...
- playwright 一些方法解决cloudflare防护页的问题
在尝试从一个使用Cloudflare Web应用程序防火墙(WAF)保护的网站获取数据时,我遇到了一些挑战.该网站的安全措施非常严格,以至于在正常浏览几个页面后,Cloudflare的检查页面就会出现 ...
- 【算法】C程序超详细的qsort排序函数解释和模拟
C程序利用冒泡排序的思想模拟实现qsort排序函数 求个赞求个赞求个赞求个赞 谢谢 先赞后看好习惯 打字不容易,这都是很用心做的,希望得到支持你 大家的点赞和支持对于我来说是一种非常重要的动力 看完之 ...
- Android 相册
- 设计模式(三十二)----综合应用-自定义Spring框架-自定义Spring IOC-自定义Spring IOC总结
1 自定义Spring IOC总结 1.1 使用到的设计模式 工厂模式.这个使用工厂模式 + 配置文件的方式. 单例模式.Spring IOC管理的bean对象都是单例的,此处的单例不是通过构造器进行 ...
- Python Fire:更加灵活的命令行参数
之前介绍过Python的Fire库,一个用来生成命令行工具的的库.请参考:Python Fire:自动生成命令行接口 今天,针对命令行参数,补充两种更加灵活的设置方式. 1. *args 型参数 *a ...
- Oracle查询存在外键约束但未创建对应索引的情况
1.Oracle提供的脚本 2.网络搜索到的脚本 3.改为可以指定用户的脚本 4.测试脚本使用 1.Oracle提供的脚本 如果要求管控严格,可以考虑使用Oracle官方提供的脚本. Script t ...