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

我有以下代码


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 等


LEATH
浏览 128回答 1
1回答

幕布斯7119047

您不能将 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){            ....        }    }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java