为了账号安全,请及时绑定邮箱和手机立即绑定

处理Sys refcursor时如何解决java.lang.ClassCastException?

处理Sys refcursor时如何解决java.lang.ClassCastException?

LEATH 2021-12-10 10:16:49
我有以下代码StoredProcedureQuery storedProcedure = em.createStoredProcedureQuery("pkg_p.proc_p");         storedProcedure.getResultList();存储过程返回一个与以下查询等效的引用游标 select 1 as id_col, 'My Name ' as name , 1000 as sal from dual;我有一个 pojo 类 MyTable,它相当于查询的结果集返回类型 public class MyTable { private Long idCol; private String name; private Long sal; /// setter and getters omitted for brevity}for(Object[]row: resultSet)        {MyTable mt = new MyTable ();mt.setIdCol((Long)row[0]);  ///throw class cast exception}如何解决以下错误请求处理失败;嵌套异常是 java.lang.ClassCastException: java.math.BigDecimal 不能转换为 java.lang.Long即使 row[0] 具有 Long 值,如 1,2,10,687 等
查看完整描述

1 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

您不能将 Big Decimal 转换为 Long,您可以使用它从中获取 Long 值


row[0].longValue()

如果这不起作用,则将行转换为大十进制并且


(BigDecimal) row[0].longValue()

所以你的代码看起来像这样


mt.setIdCol((BigDecimal)row[0].longValue());

或尝试将循环更改为


for(BigDecimal[] row : resultSet)

如果你不想使用铸造


阅读您的评论后。


    for(Object[] row: resultSet) {

        MyTable mt = new MyTable();

        if(resultSet instanceof BigDecimal) {

            mt.setIdCol((BigDecimal)row[0].longValue());

        } else if (resultSet instanceof String){

            ....

        }

    }


查看完整回答
反对 回复 2021-12-10
  • 1 回答
  • 0 关注
  • 127 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信