ScalarHandler返回的参数

本文探讨了使用ScalarHandler从SQL查询中获取聚合函数值的方法,并讨论了如何正确地进行数据类型转换,避免运行时错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ScalarHandler用来获得聚合函数的值,返回类型是Object,用Number来接收比较好
Number num=qr.query(cntSql.append(whereSql).toString(),new ScalarHandler<>(),params.toArray());
然后调用intValue()方法
int tr=num.intValue()即可!

但是,之前我都是用long来接收,进行强转,然后再强转成int
long num=(long)qr.query(cntSql.append(whereSql).toString(),new ScalarHandler<>(),params.toArray());
int tr=(int)num;

虽然不知道为什么可以用long来接收,而不能直接用int来接收,有点小感悟,在不知道返回类型选择的情况下,选择其公共父类来接收,Number为Long Integer等包装类的父类,
用父类来接收,然后调用子类重写的方法

同样的,之前遇到一个问题,就是Servlet中四大域获取属性的方法getAttribute(),假设得到的值为value,value是数字类型的字符串,那么只能这样转换成数字类型:
request.setAttribute(name,"1");//向域中存入一个数字类型的字符串
String value = (String)request.getAttribute(name);
int tr = Integer.parseInt(value);
而不能直接强转
int value = (int)request.getAttribute(name);//会报错,ClassCastException类型转换异常
其实现在想想也好理解,jvm是根据类型来转换的,你传入的是个String类型,最后也只能用String来接收,再转化成int类型!
而且基本数据类型不能和引用数据类型进行强转,除了包装类,类之间的强转也需要有继承关系!

转载于:https://www.cnblogs.com/doveshelly/p/8868420.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值