关于数据库取出的BigInt无法转化为Long的问题及解决方法

数据库中取出BigInt转Long出现异常

数据库中的字段类型
数据库中的表数据

@Query(value = "select id from b ", nativeQuery = true)
  List<Long> ids();

在某些业务逻辑中,可能只需要筛选出需要的某一列数据即可,使用 List
去接 查询出来的单列结果。

for(Long id:xxx)
使用forEach去遍历时,Long id 出现BigInt转Long错误提示。

取出来的数据只能用下标 i 去遍历个数,但是有需求把数据取出来时,
又出现了 bigInt转Long出现错误。

废话不多说:直接上解决方案。
最后采用的解决方法是使用List<Object[]>去接多列结果

再使用Java8新特性 Stream流 去取出第一列的数据,再转化为Long集合

      List<Long> xxxList = xxx.stream()
      .map(i -> Long.valueOf(i[0].toString())).collect(Collectors.toList());

解释一下上面的代码:xxx中填的是取出来的List<Object[]>集合的变量名,把它转成stream流,利用map对Stream中包含的元素使用给定的转换函数进行转换操作i[0]指的是第一列,i[1]指的是第二列以此类推,再使用collect进行聚合为List集合。

上面的有时候会转型失败:
这个可以解决:

   @Query(value = "select id from information",nativeQuery = true)
   List<BigInteger>  query();

   List<Long> longList =     customerContactInformationRepository.query().stream().map(BigInteger::longValue).collect(toList());

中间也想使用包装类型转换都没有成功,可能是实力限制 ,希望还有此类问题解决方法的童鞋 多多留言,共勉

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值