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

java- 类转换异常 - 大整数不能转换为长

java- 类转换异常 - 大整数不能转换为长

GCT1015 2022-09-22 19:27:58

我的表中有两列是大国际特数据类型(节点和 ULNODEID),我想保持这种方式。我正在为这些表使用MYSQL工作台8.0。


我想使用以下函数获取我的节点ID的值:


 public long get_urlnodeid(long nodeID) {

        try {



                String sql = "select NODEID from urllink where ULNODEID="+nodeID;

            if (em == null) {

                throw new Exception("could not found URL object.");

            }


            return (long) em.createNativeQuery(sql).getSingleResult();



        } catch (Exception e) {


            msg = CoreUtil.wrapMsg(CoreUtil.FUNC_ERROR,

                    this.getClass().getName(), "get", e.getMessage());


        }

        return 0;

    }

它抛出一个异常,说Big Integer cannot be cast to java.lang.Long


有没有办法在保留值的同时检索值?long


查看完整描述

1 回答

?
慕斯王

TA贡献1515条经验 获得超2个赞

只要看看比格的Java文档:

public long longValue()

将此大整数转换为多头。此转换类似于 Java™ 语言规范第 5.1.3 节中定义的从长整型到 int 的缩小基元转换:如果此 BigInteger 太大而无法放入长整型,则仅返回低阶 64 位。请注意,此转换可能会丢失有关 BigInteger 值的总体大小的信息,并返回带有相反符号的结果。

所以你会想要这样的东西:

return ((BigInteger)em.createNativeQuery(sql).getSingleResult()).longValue();

我建议添加一些类型检查。

--

如果您完全控制应用程序,并且希望值超出 的范围,则另一种选择是让方法返回而不是 :longBigIntegerlong

public BigInteger get_urlnodeid(long nodeID) {

和:

return (BigInteger) em.createNativeQuery(sql).getSingleResult();

当然,调用此方法的应用程序的其余部分也必须使用。BigInteger

请注意,使用代替的性能要低得多,因此,仅当性能不是问题,或者您绝对确定值会非常大以至于绝对必要时,才使用此选项。BigIntegerlong


查看完整回答
反对 回复 6天前

添加回答

举报

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